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

usercontrol里如何没有类似form的active事件,晕死了

2012-01-05 
usercontrol里怎么没有类似form的active事件,晕死了自定义了一个usercontrol,想在控件第一次加载显示的时

usercontrol里怎么没有类似form的active事件,晕死了
自定义了一个usercontrol,想在控件第一次加载显示的时候执行一些代码,得到控件所属的parentform,发现没一个事件可以用
直接写在构造函数里的话,因为函数执行的时候控件还没有显示出来,parentform为null
createcontrol事件中没法取出parentform,也为null
试了一下load事件,发现这个load事件有时在构造函数都没执行的完的情况下会触发,比如usercontrol中包含了activex,这样的执行构造函
数中的InitializeComponent()是将会引发load事件,这个时候当然parentform也是null,又晕死
如果单单取usercontrol的parent属性的话,可以使用parentchanged事件,单如果usercontrol本身并不直接属于form,而是嵌套在某个其他的控件里的话,在parentchanged事件中通过递归查找parent的方法也是没法取到顶级窗体的(最后还是得到null)
怎么就没有parentformchanged事件呢?
如果直接把代码写死在form的active事件中是可以,但问题是我的usercontrol并不知道自己会被哪个form引用,故这种方式也是没法用


[解决办法]

 usercontrol里怎么 会有 类似form的active事件呢?
[解决办法]

C# code
        private void UserControl1_ParentChanged(object sender, EventArgs e)        {            Control ctl = this.Parent;        }
[解决办法]
如果直接把代码写死在form的active事件中是可以,但问题是我的usercontrol并不知道自己会被哪个form引用,故这种方式也是没法用 


查 Form.ActiveForm
[解决办法]
为什么要得到parentform?
parentform是个没办法确定的东西
就算得到又能怎么样?

你可以在你的UserControl中定义事件
然后再窗体监视这个事件不就结了么

或者定义一个public的方法
等着parentform调用
[解决办法]
在parentForm中设置userControl的Tag为parentForm
在userControl中就可以通过Tag访问parentForm。试试
[解决办法]
VisibleChanged事件,
if(this.Visible)

[解决办法]
usercontrol.ParentControl属性,就是你要的form了.
我记得有这个属性.
[解决办法]
UserControl1_ParentChanged
这个解决不了你的问题吗?

还有你想知道usercontrol的parentForm.
可以递归查找啊.
如果parent是Form,就找到了,如果不是,继续查找他的Parent.
[解决办法]
UserControl也是Window,所以如果lz想要Activate事件或者时机可以通过WM_ACTIVATE消息来判断,如果WParam是WA_ACTIVE,WA_CLICKACTIVE均是激活,只有WA_INACTIVE是不激活(具体值记不清了,lz自己去MSDN查一下吧

热点排行