我之前问过一个关于如何在 C# 中选择动态创建的列表框项目的问题,得到了回答。现在的问题是当列表框在弹出时获得焦点!除非我选择一个项目或按 Esc,否则我无法继续输入,我已明确定义将焦点设置回我的TextBox
.
具有讽刺意味的是,我的KeyDown
事件中有一个条件,即如果按下向上或向下箭头键,则将焦点设置在ListBox
以便用户可以选择一个项目,但不要转移焦点以便用户可以继续自由输入。
就像我们在 Visual Studio 上的一样,当用户按下一个点时,他不会被阻止并被迫从 Intellisense 列表中选择一个项目,但他可以继续输入或随时使用向上或向下箭头键来选择适当的项目。
我无法使用下面的代码实现相同的功能。我怎样才能让它像提到的那样工作?
我需要说的是,使用 ActiveControl 和 transferFocus,使用this.Focus()
之前lst.Focus()
,禁用和启用文本框都不起作用!
private void txtResults_KeyDown(object sender, KeyEventArgs e)
{
string[] words= ((TextBox)sender).Text.Split(' ');
string s = sampleWord.Text = words[words.Length - 1];
if (e.KeyCode == Keys.OemPeriod)
{
ShowPopUpList(s);
lst.Focus(); //This transfers the focus to listbox but then prevents user
//from being able to type anymore unless he/she chooses an item!
}
else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up)
{
lst.Focus();//doesnt work :-/
}
else
{
lst.Hide();
txtResults.Focus();
}
}