corbis
20-04-2015, 01:57
Есть форма, на ней 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
}
})
при этом курсор сбрасывается в начало строки и никак это дело не победить.
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
}
})