【发布时间】:2013-12-22 06:14:23
【问题描述】:
我尝试实现类似于 Intellisense 的功能:当用户在 (WinForms) 文本框中输入文本时,我想显示建议。
目前,我正在TextBox的TextChanged-EventHandler中做这样的事情:
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);
但是,一旦弹出窗口出现,TextBox 就会失去焦点。弹出窗口没有获得焦点 - 焦点似乎完全消失了。
我能对这种行为做些什么?
谢谢!
【问题讨论】:
-
你为什么用
ToolStripMenu,你有什么具体原因吗?,你可以使用AutoComplete的功能来显示文本框上的项目 -
@SudhakarTillapudi 因为稍后我将用一些自定义列表框替换列表框,该列表框将为每个建议显示更大、更复杂的控件。
-
在事件处理程序中转移焦点总是很危险的,您必须使用 Control.BeginInvoke() 来延迟它。这不会是麻烦的结束,下拉菜单不喜欢失去焦点,因为它使用它来自动再次折叠。动态创建和处理普通列表框是正确的方法。