TextBox 在 KeyUp 或 KeyDown 之后的末尾设置光标
TextBox Set Cursor at end after KeyUp or KeyDown
我有一个列表,其中包含我的 TextBox 之前的条目。通过使用 KeyUp / KeyDown 我可以滚动浏览此列表,显示 TextBox 中的文本。
在 TextBox 中设置另一个字符串,编辑光标应位于 Teemphasized textxtBox 中字符串的末尾。 myTextBox.Select(RTextBox.Text.Length, 0); 在这里非常有用,但是在 KeyUp 之后,这是将光标设置为不在文末,前一字。在 KeyDown 结束后,更正。我猜根据命名 preview 当前字符还没有被计算进来,但是即使在长度上加上 +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 之后设置光标,但在 KeyUp / [=21= 的情况下]KeyDown我完全不知道这是否可行
我应该设置光标的任何其他事件?
编辑:我正在使用 WinForms。
如果是 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;
}
}
我有一个列表,其中包含我的 TextBox 之前的条目。通过使用 KeyUp / KeyDown 我可以滚动浏览此列表,显示 TextBox 中的文本。
在 TextBox 中设置另一个字符串,编辑光标应位于 Teemphasized textxtBox 中字符串的末尾。 myTextBox.Select(RTextBox.Text.Length, 0); 在这里非常有用,但是在 KeyUp 之后,这是将光标设置为不在文末,前一字。在 KeyDown 结束后,更正。我猜根据命名 preview 当前字符还没有被计算进来,但是即使在长度上加上 +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 之后设置光标,但在 KeyUp / [=21= 的情况下]KeyDown我完全不知道这是否可行
我应该设置光标的任何其他事件?
编辑:我正在使用 WinForms。
如果是 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;
}
}