Windows 窗体:跟随焦点
WindowsForms: Following the Focus
问题:
我有一个显示 ListBox
的自定义 TextBox
,以便为用户提供一些输入建议。
现在的问题是,当用户离开 TextBox
时需要隐藏 ListBox
,但有一个例外。如果用户单击 ListBox
,ListBox
将保持可见。
有什么方法可以使用 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;
}
问题:
我有一个显示 ListBox
的自定义 TextBox
,以便为用户提供一些输入建议。
现在的问题是,当用户离开 TextBox
时需要隐藏 ListBox
,但有一个例外。如果用户单击 ListBox
,ListBox
将保持可见。
有什么方法可以使用 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;
}