Windows 窗体:跟随焦点

WindowsForms: Following the Focus

问题: 我有一个显示 ListBox 的自定义 TextBox,以便为用户提供一些输入建议。 现在的问题是,当用户离开 TextBox 时需要隐藏 ListBox,但有一个例外。如果用户单击 ListBoxListBox 将保持可见。

有什么方法可以使用 Leave 或 LostFocus 事件来确定下一个控件是否是我的 ListBox


不是问题但也很有趣:你能在控件中找出在焦点改变之前哪个控件处于活动状态吗?

在您的 TextBox.LostFocus 事件处理程序中,您可以在关闭可见性之前检查 属性 ListBox.ContainsFocus

ContainsFocus 属性 文档:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.containsfocus(v=vs.110).aspx

在您的 textBox_Leave 活动中检查当前 ActiveControl 是否是您的 ListBox。如果为 true,则 ListBox 在您离开 TextBox 后获得焦点并且它将保持可见,但如果为 false,则隐藏 ListBox:

private void textBox1_Leave(object sender, EventArgs e)
{
    if (this.ActiveControl != listBox1)
        listBox1.Visible = false;
}