【问题标题】:TextBox loosing focus when displaying popup显示弹出窗口时文本框失去焦点
【发布时间】: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() 来延迟它。这不会是麻烦的结束,下拉菜单不喜欢失去焦点,因为它使用它来自动再次折叠。动态创建和处理普通列表框是正确的方法。

标签: c# winforms focus


【解决方案1】:

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

【讨论】:

  • 不幸的是,这不起作用。我试过 .Focus() 也没有任何效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多