我是初接触c#,遇到了一些问题,想问一些思路方面的问题,不是要贴代码。
比如是这样:父界面form1中有button1和button2,和panel,点击button1时在panel里显示子界面form2,点击button2时在panel里显示其它form,现在是我的form2里默认进入一个控件,有焦点,且有失焦点事件。
这个画面其实挺简单的,希望我描述的还算清楚。现在是我在form2里操作没问题, 但是如果我点了button1进入form2,但是又不想操作了,直接点button2退出来,这个时候还是要执行失焦点事件!!
不加控制的话,程序就是这样执行。可是我现在就是想要控制一下,让这个失焦点事件不执行,并且form1是别人写的,一般不能改,我只能尽量改我的form2,怎么办啊?先说一下我的一些想法:
一开始想过判断点击的控件是不是属于form2,但是我的form2里有好多控件,这样太不现实了。
又想过利用一些form的leave,disactivate等函数,但是它们都是在失焦点事件之后发生,没用。
还有想过在失焦点事件里加标志位判断,但是这个值其实也没法设置……就这样觉得无计可施了,希望各位高手给个思路,拦击一下这个失焦点事件?或者有什么直接能用的属性值我不知道??

解决方案 »

  1.   

    亲爱的bdmh:
    太抽象了吧?而且,即使要脱离,这个脱离的操作写在哪里呢?感觉你的意思是写在button2的click事件里?可是我只能操作form2啊
      

  2.   

    如果我的界面描述的不清楚的话,我再换一个吧,左右结构,左边是树状菜单,右边是form,左边点击结点进入一个界面的控件,有失焦点事件,再点击左边别的结点,想要直接退出或者隐藏前面的界面,但是没办法,要触发失焦点啊,我就想怎么拦截一下,不触发它?
      

  3.   

    哎,没有人回答了么?
    我又想到了利用鼠标mouseEnter和mouseLeave,如果给panel增加mouseLeave事件,倒是可以在失焦点前执行,可是一旦进入控件,也要触发mouseLeave,这就不好了。本意是希望鼠标移出整个panel所在的区域才触发,这样就可以将失焦点事件通过+= new EventHandler这种形式去掉。
      

  4.   

    form2的show方法里有owner吧?owner是form1 的话就把事件的注册卸掉(-=)
      

  5.   

    问题解决了,好像想得太复杂了,最后还是只用了个标志位,进到失焦点事件就判断,不满足就退出。但是也代价,就是给我的每一个form2里用得着的控件都多加了个enter函数,哎……