关于winform中的Focus() 问题

在打开一个窗体时,我们往往需要设置焦点让光标出现在我们希望它出现的位置上。

这时我们可以在窗体的Activated事件中设置焦点

例如我们希望光标在打开窗体的时候出现在textBox1上,我们只需要在Activated事件中添加如下代码:

this.textBox1.Focus();

即可。

我刚开始是把这段代码放在Load事件当中的,可是运行程序的时候却没有效果,在网上查了一下,在load事件中设置焦点可以将代码写成:

this.show();

this.textBox1.Focus();

即可。

参考:http://www.cnblogs.com/michaellee/archive/2008/01/25/1053366.html

摘要:

决定一个控件是否可以被Focus的条件有两个:一个是控件可见(bool visible = SafeNativeMethods.IsWindowVisible(new HandleRef(window, Handle));),另一个是控件是可用的(bool enabled = SafeNativeMethods.IsWindowEnabled(new HandleRef(window, Handle)); )。只有这两个条件同时具备时,才能支持控件设置焦点。
    那么为什么Form_Load函数里面执行Focus()方法会失败呢?控件的Enable属性为true是肯定的,因为我从没有修改过控件的Enable属性,只有Visible属性有可能是false。也就是说在Form_Load方法在返回之前,程序的界面还没有显示呢。我们再做一个实验:
    在按钮的事件响应函数里面填上this.txtTestTextBox.Focus();代码,测试一下。
    编译,运行,此时焦点在Button上,拍下空格键,弹出MessageBox,确定之后,发现焦点已经转移到TextBox上了

这次是设置成功了。那么我们能否在Form_Load中也设置成功呢?肯定能啊,只要在调用Focus方法前让控件编程Visible就可以了。我们可以在Form_Load方法中加入一行this.Show();代码,如下:
        private void Form1_Load(object sender, EventArgs e)
        {
            this.txtTestTextBox.Text = "测试一下";
            this.Show();
            this.txtTestTextBox.Focus();
        }

    这下界面显示出来时,焦点就在TextBox上了。说了这么多,其实就明白了一件事儿,一个控件要具有焦点,需要两个条件:一个是控件是可见的,另一个是控件是Enable状态的。我用Reflector看了一下,.NET 1.1、2.0、3.0、3.5的相关代码都是一样的。

Activated事件:每当窗体被激活时发生的事件。

你可能感兴趣的:(WinForm)