2013-12-22 115 views
0

我尝试实现类似于Intellisense的操作:当用户在(WinForms)文本框中输入文本时,我想显示建议。TextBox在显示弹出窗口时失去焦点

目前,我做这样的事情在TextBox的框TextChanged-事件处理程序:

 ListBox lb = new ListBox(); 
     lb.Items.Add(new DataItem() { Id = "1", DisplayText = "Abc" }); 
     lb.Items.Add(new DataItem() {Id = "2", DisplayText = "Abuiaec"}); 


     ToolStripDropDown popup = new ToolStripDropDown(); 
     popup.Margin = Padding.Empty; 
     popup.Padding = Padding.Empty; 
     ToolStripControlHost host = new ToolStripControlHost(lb); 
     host.Margin = Padding.Empty; 
     host.Padding = Padding.Empty; 
     popup.Items.Add(host); 
     popup.Show(this, Point.Empty); 

然而,只要弹出来了,文本框失去它的焦点。弹出窗口没有得到重点 - 看起来焦点完全消失。

我能对付这种行为吗?

谢谢!

+0

为什么你使用'ToolStripMenu',你有什么具体的原因?,你可以使用'AutoComplete'功能来显示文本框上的项目 –

+0

@SudhakarTillapudi因为我打算稍后用一些自定义列表框替换列表框将对每个建议显示更大和更复杂的控制。 – Philipp

+0

在事件处理程序中加重焦点总是很危险,您必须通过使用Control.BeginInvoke()来延迟焦点。这不会是麻烦的结束,下拉不喜欢失去焦点,因为它使用它自动重新崩溃。动态创建和处理一个普通的列表框是正确的方法。 –

回答

0

尝试在末尾添加textbox.Select()以将焦点放在文本框上。

+0

不幸的是,这是行不通的。我曾尝试过.Focus(),它也没有任何效果。 – Philipp