我创建了一个C#usercontrol。
此用户控件托管在如下面板中:
UserControlQuestion1 question1 = new UserControlQuestion1();
panel1.Controls.Add(question1);
panel1.Visible = true;
我想在usercontrol中添加一个事件处理程序来处理VisibleChanged事件面板。
我试过这个正确编译:
private void InitializeComponent()
{
this.Parent.VisibleChanged += new System.EventHandler(this.Parent_VisibleChanged);
但是当我运行我的程序时,this.Parent为null,因为它尚未添加到父面板但我想
我该怎么做?
答案 0 :(得分:1)
创建控件后设置VisibleChanged
事件处理程序
UserControlQuestion1 question1 = new UserControlQuestion1();
panel1.Controls.Add(question1);
question1.Parent.VisibleChanged += new System.EventHandler(question1.Parent_VisibleChanged);
panel1.Visible = true;
OR
UserControlQuestion1 question1 = new UserControlQuestion1();
panel1.Controls.Add(question1);
panel1.VisibleChanged += new System.EventHandler(question1.Parent_VisibleChanged);
panel1.Visible = true;
答案 1 :(得分:1)
利用您目前所拥有的功能,您可以在用户控件中创建“注册事件”功能......
void RegisterEvent()
{
this.Parent.VisibleChanged += new System.EventHandler(this.Parent_VisibleChanged);
}
您可以在将其添加到父级后调用:
UserControlQuestion1 question1 = new UserControlQuestion1();
panel1.Controls.Add(question1);
question1.RegisterEvent();
panel1.Visible = true;
答案 2 :(得分:1)
您可以尝试处理ParentChanged
事件或覆盖OnParentChanged
事件提升者:
Control previousParent;
protected override void OnParentChanged(object sender, EventArgs e){
if(Parent != previousParent){
if(Parent != null) Parent.VisibleChanged += Parent_VisibleChanged;
if(previousParent != null) previousParent.VisibleChanged -= Parent_VisibleChanged;
previousParent = Parent;
}
}
请注意,使用上面的代码,您无需在Parent_VisibleChanged
中注册InitializeComponent
代码。