为什么LostFocus事件没有发生?

时间:2011-03-26 13:48:36

标签: vb.net focus

在列表框可见的情况下,我点击了windows窗体,希望使用listbox.lostfocus事件让我隐藏列表框 - 但事件不会发生。我想我可以使用form.click事件隐藏列表框,但是如何让表单接受焦点?

2 个答案:

答案 0 :(得分:0)

当焦点移动到另一个控件(如文本框)时,LostFocus事件工作,或者当表单全部丢失焦点时,您可以使用单击事件为表单检测taht

答案 1 :(得分:0)

表单想要获得焦点。它被设计成一个容器控件,它确保它的一个子控件总是得到焦点。从技术上讲,它可以在头上敲击并使其失去这种行为:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.SetStyle(ControlStyles.ContainerControl, false);
    }
    protected override void OnClick(EventArgs e) {
        this.Focus();
        base.OnClick(e);
    }
}

但这不是一个好主意。表单没有任何方式表明它具有焦点,您还必须重写OnPaint()来执行绘制焦点矩形等操作。如果不这样做,则用户完全忘记焦点所在的位置。然后,当用户使用键盘时没有任何有趣的事情会产生相当大的不便,表单没有用处。

不要这样做。如果要使控件消失,请在UI中添加菜单项,工具栏按钮或普通按钮。用户可以点击的东西。

相关问题