2015-11-03 86 views
0

我在这个项目中有一些嵌入式用户控件我一直在试图访问父控件中的按钮状态,我的返回值并不是我期望的。从另一个用户控件引用用户控件

var parentControl = (OrderDetail)this.Parent.Parent; 

     // set return based on the OrderDetail control button state 
     UltraButton btn = parentControl.Controls.Find("btnReturn", true).FirstOrDefault() as UltraButton; 

,它总是返回btn.Enabled =真回到我的身边,即使当表单加载完成我在这里引用该按钮不会启用。有没有我在这里没有意识到的生命周期事物?深入研究winforms对我来说很少,所以我肯定我错过了一些东西,只是不确定它到底是什么。

谢谢!

+1

没有足够的代码来帮助你。 “this.Parent.Parent”正在寻求麻烦。 UserControls不应该真正与其他UserControl交谈。在UserControls中设置一个属性引用可能会更好,并且如果他们真的需要相互交流,让母亲形式将属性连接在一起。 – LarsTech

+0

我不确定'btn.Enabled'应该是'false',除非您将它设置为manualy。 – Alexander

+0

事实证明,在设置按钮之前,即使是详细用户控件的负载也在触发,只是您了解winforms的一件事。通过检查子用户控件的OnVisibleChange事件中的状态,我能够得到我想要的结果。感谢您的帮助。 – DogEars

回答

0

将我的代码放到OnVisibleChanged事件中。

protected override void OnVisibleChanged(EventArgs e) 
    { 
     base.OnVisibleChanged(e); 

     if (Visible && !Disposing) 
     { 
      // set return change option based on the OrderDetail control button state 
      UltraButton btn = parentControl.Controls.Find("btnReturn", true).FirstOrDefault() as UltraButton; 

      if (btn != null && (HasPermissions && btn.Enabled)) 
       actionAllowed = true; 
     } 
    }