2015-11-03 85 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; 
     } 
    }