首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

winform窗体取得焦点事件

2013-07-11 
winform窗体获得焦点事件在窗体A获得焦点时,判断窗体B的必须项,如果为空弹出msg,返回画面B代码如下public

winform窗体获得焦点事件
在窗体A获得焦点时,判断窗体B的必须项,如果为空弹出msg,返回画面B
代码如下


        public Boolean bolActive = true;
        private void formA_Activated(object sender, EventArgs e)
        {
            if (bolActive)
            {
                if (string.IsNullOrEmpty(formB.txt1.Text))
                {
                    bolActive = false;
                    MessageBox.Show("123");
                    frmB.BringToFront();
                }
            }
        }

问题是如果鼠标点击窗体A的标题栏,formA_Activated事件会运行两次,弹出两次msg,而点击窗体A的客户区就没问题,求教为什么?有什么好的解决办法?
[解决办法]
先把public Boolean bolActive = false; 设置为false,然后根据如下代码:
foreach (DockContent form in formsDockPanel.Contents)
            {
                if (form is formB)
                {
                    form.Activate();
                    bolActive = true;
                    return;
                }


            }
将public Boolean bolActive = true;设置为true;

formsDockPanel这个是个容器Panel,不用解释了吧!
再试试看看。

[解决办法]
如果真是这样,你注销和再次注册formA_Activated事件,来弥补这个缺陷。

或者你把代码部分部分的注释掉,一步一步的再调试,看看是那部分的代码出了问题。
[解决办法]
你直接让B窗体的必填项都填完之后再返回A不就好了吗?
[解决办法]
你这个事件是每当窗体被激活是发生的,你连续点当然一直激活会一直弹出你下面的mesg,你加载窗体一次点击text又一次不就两次了···
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你这个事件是每当窗体被激活是发生的,你连续点当然一直激活会一直弹出你下面的mesg,你加载窗体一次点击text又一次不就两次了···

不明觉厉。。

什么意思,语文老师水平有限没教太多就被炒了!

扯这些就没意思了,说点实在的,我都没看懂。

意思是窗体加载就已经激活窗体,就已经执行了一次
private void formA_Activated(object sender, EventArgs e)
        {
            if (bolActive)
            {
                if (string.IsNullOrEmpty(formB.txt1.Text))
                {
                    bolActive = false;
                    MessageBox.Show("123");
                    formB.BringToFront();
                    bolActive = true;
                }
            }
因为你这个判断string.IsNullOrEmpty(formB.txt1.Text)是成立的,而你再点一次当然又在激活了,你自己判断都这样判断,你要改改这个 if (string.IsNullOrEmpty(formB.txt1.Text))判断就可以解决你的问题了吧,不知道这样说行不?
[解决办法]
试试Form的Enter事件

热点排行