我有一个列表,其中包含 TextBox 的先前条目。通过使用 KeyUp / KeyDown ,我可以滚动浏览此列表,显示TextBox中的文本。
在 TextBox 中设置另一个字符串edit-cursor应位于Te 强调文本 xtBox中字符串的末尾。 myTextBox.Select(RTextBox.Text.Length,0); 在这里非常有用,但在 KeyUp 之后,这是将光标设置在文本的末尾,它是&#39 ;之前是一个角色。在 KeyDown 之后,最后,正确。我想根据命名预览,当前字符尚未计算,但即使在长度上加+1也不起作用。
private void MyTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyValue)
{
case (char)Keys.Up:
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
case (char)Keys.Down:
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
}
}
private void MyTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case (char)Keys.Up:
// I'd guess setting the cursor here would be perfect
// but KeyUp/KeyDown can't be caught here, unfortunately
myTextBox.Select(RTextBox.Text.Length, 0);
break;
}
}
所以我认为我必须在 PreviewKeyDown -Event之后设置cursore但是在 KeyUp / KeyDown 的情况下我不会#39 ; t。知道这是否可行。
我应该设置光标的任何其他事件吗?
编辑:我正在使用WinForms。
答案 0 :(得分:0)
尝试添加此行,如果它是Keys.Up
或Keys.Down
并使用KeyDown
事件:
e.Handled = true;
这意味着跳过了正常行为。最后你有这个:
private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyValue)
{
case (char)Keys.Up:
e.Handled = true;
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
case (char)Keys.Down:
e.Handled = true;
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
}
}