我想在用户开始输入内容时激活搜索文本框(即使文本框没有正确聚焦)。我已将表单上的KeyPreview
设置为true
。然后在KeyDown事件处理程序中,我有:
if(!searchTextBox.Focused)
{
searchTextBox.Focus();
}
这几乎可行。文本框是聚焦的,但第一个键入的字母丢失了。我想这是因为文本框从来没有真正得到过这个事件,因为当它发生时它没有被聚焦。那么,有没有人有一个聪明的解决方案,我可以如何使这项工作像它应该的那样?
我还想了解如何只在按下常规按键时才会发生这种情况。所以不喜欢,箭头键,修改键,功能键等。但我可能会想办法。另一方面,前一个问题,我不太确定我应该如何处理...
答案 0 :(得分:4)
作为SDX2000答案的补充,请查看KeyDown事件的MSDN article。它还引用了KeyPressed事件,它在KeyDown事件之后触发,我认为它更适合您想要做的事情。
引用MSDN:
KeyPressEventArgs指定用户按下键时组成的字符。例如,当用户按下SHIFT + K时,KeyChar属性返回一个大写的K。
private void YourEventHandler(object Sender, KeyPressEventArgs Args)
{
if(!searchTextBox.Focused)
{
searchTextBox.Focus();
searchTextBox.Text += Args.KeyChar;
// move caret to end of text because Focus() selects all the text
searchTextBox.SelectionStart = searchTextBox.Text.Length
}
}
我实际上不确定您是否可以使用+=
将字符串附加到字符串,因此您需要检查它。我不知道当用户点击return
时会发生什么,更好地跟进该问题。
答案 1 :(得分:3)
作为KeyDown事件的一部分,您将获得第一个击键。您可以自己将其保存到文本框中。