Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - непослушный textBox

Ответить
Настройки темы
PowerShell - непослушный textBox

Пользователь


Сообщения: 114
Благодарности: 13

Профиль | Отправить PM | Цитировать


Изменения
Автор: corbis
Дата: 20-04-2015
Есть форма, на ней TextBox. При вводе ФИО, текст приводится в правильный формат написания имени, но
при этом курсор сбрасывается в начало строки и никак это дело не победить.

Код: Выделить весь код
Add-Type -AssemblyName System.Windows.Forms

$Form1 = New-Object system.Windows.Forms.Form
$txtBox = New-Object Windows.Forms.TextBox
$txtBox.Size = New-Object Drawing.Size(200, 25)
$txtBox.Location = New-Object Drawing.Point(10, 30)
$Form1.Controls.Add($txtBox)

$txtBox.add_KeyPress({$txtBox.Text = (Get-Culture).TextInfo.ToTitleCase($txtBox.Text)
})

$Form1.Add_Shown({$Form1.Activate()})
$result = $Form1.ShowDialog()
Пробовал переводить курсор в конец строки,
Код: Выделить весь код
$txtBox.select($txtBox.TextLength, 0)
но тогда нельзя делать исправления в тексте.

Если переводить не в конец строки, а сдвигать курсор относительно вводимого символа, то вообще
билеберда творится.

Решение нашлось. Вдруг кому пригодится:
Код: Выделить весь код
$txtBox.add_KeyPress({
    $txtLength = $txtBox.textLength
    if ($txtLength -eq 1)
    {
        $txtBox.text = (Get-Culture).TextInfo.ToTitleCase($txtBox.Text)
        $txtBox.SelectionStart = 1
    }
    elseif ($txtLength -gt 1 -and $txtBoxFIO.SelectionStart -lt $txtLength)
    {
        $SelectStart = $txtBoxFIO.SelectionStart
        $txtBox.text = (Get-Culture).TextInfo.ToTitleCase($txtBox.Text)
        $txtBox.SelectionStart = $SelectStart
    }
    elseif ($txtLength -gt 1 -and $txtBoxFIO.SelectionStart -ge $txtLength)
    {
        $txtBox.text = (Get-Culture).TextInfo.ToTitleCase($txtBox.Text)
        $txtBox.SelectionStart = $txtLength
    }
})

Отправлено: 01:57, 20-04-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$txtBox.add_KeyPress({
    $SelectionStart = $txtBox.SelectionStart
    $SelectionLength = $txtBox.SelectionLength
    
    $txtBox.text = (Get-Culture).TextInfo.ToTitleCase($txtBox.Text)
    
    $txtBox.SelectionStart = $SelectionStart
    $txtBox.SelectionLength = $SelectionLength
})
Выбор события KeyPress для реализации ProperCase — не самый удачный выбор.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:10, 20-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 114
Благодарности: 13

Профиль | Отправить PM | Цитировать


А какое событие больше подходит? Это мой первый более-менее серьезный опыт с формами.
comboBox тоже победить не могу. Надо его прозрачным сделать, но сохранить картинку на основной форме.
Вычитал, что надо создавать control и ему уже присваивать backcolor trnsparent. Только вот с реализацией пока туго.

Спасибо. Так гораздо культурнее выглядит.

Отправлено: 15:12, 20-04-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата corbis:
А какое событие больше подходит? »
Я бы попробовал пользовать выход из элемента управления/потерю фокуса, например.

Цитата corbis:
comboBox тоже победить не могу. Надо его прозрачным сделать, но сохранить картинку на основной форме.
Вычитал, что надо создавать control и ему уже присваивать backcolor trnsparent. Только вот с реализацией пока туго. »
Приводите Ваш код. Коллеги, возможно, подскажут.

Отправлено: 00:28, 21-04-2015 | #4


Пользователь


Сообщения: 114
Благодарности: 13

Профиль | Отправить PM | Цитировать


Ну, собственно, можно взять за пример тот же код выше.
Код: Выделить весь код
Add-Type -AssemblyName System.Windows.Forms

$Form1 = New-Object system.Windows.Forms.Form
$comboBox = New-Object Windows.Forms.ComboBox
$comboBox.Size = New-Object Drawing.Size(200, 25)
$comboBox.Location = New-Object Drawing.Point(10, 30)

# А вот как написать это:
SetStyle(System.Windows.Forms.ControlStyles.SupportsTransparentBackColor, $true)
# я не пойму.
 
$ComboBox.BackColor =  [System.Drawing.Color]::Transparent

$Form1.Add_Shown({$Form1.Activate()})
$result = $Form1.ShowDialog()

Отправлено: 01:38, 21-04-2015 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - непослушный textBox

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
непослушный битрейд видео fyt Видео и аудио: обработка и кодирование 7 25-01-2014 11:10
p6t ws pro (непослушный биос) KLIVER2007 Материнские платы и память 11 24-05-2013 23:51
Непослушный курсор мышки Traktor Microsoft Windows 2000/XP 8 12-01-2006 19:40
Textbox Nusik Программирование и базы данных 4 22-10-2004 10:22
TextBox+1,2,3.... Leonidas Программирование и базы данных 1 15-05-2004 03:54




 
Переход