Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   непослушный textBox (http://forum.oszone.net/showthread.php?t=298635)

corbis 20-04-2015 01:57 2498143

непослушный textBox
 
Есть форма, на ней 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
    }
})


Iska 20-04-2015 06:10 2498167

Код:

$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 — не самый удачный выбор.

corbis 20-04-2015 15:12 2498318

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

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

Iska 21-04-2015 00:28 2498493

Цитата:

Цитата corbis
А какое событие больше подходит? »

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

Цитата:

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

Приводите Ваш код. Коллеги, возможно, подскажут.

corbis 21-04-2015 01:38 2498509

Ну, собственно, можно взять за пример тот же код выше.
Код:

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()



Время: 08:56.

Время: 08:56.
© OSzone.net 2001-