2008-08-27 93 views
1

我的項目中的許多表單都從基礎表單繼承。很容易得到派生形式的Controls集合,但是我沒有找到訪問Components集合的簡單方法,因爲VS將其標記爲私有。從基礎表單訪問繼承的表單上的組件

我認爲這可以通過反射來完成,但我不確定如何最好地去做,而不是以前使用反射。

現在,我使用了一種笨重的解決方法,其中我重寫了一個函數Ge​​tComponents並返回了我感興趣的組件的數組。這顯然容易出錯,因爲它很容易忘記實施重寫的功能或在添加組件時進行更新。

如果有人有任何提示或可以建議更好的方法,我會很高興聽到。

回答

0

如果您擔心忘記重寫該功能,請將其設置爲抽象。

1

如果您將組件的Modifiers屬性設置爲嚴格受保護,使得它們無需使用組件集合即可訪問。

編輯: 可發現性可以使用反射來遍歷每個字段。儘管你的情況可能不是最理想的。

0

將「組件」修改器設置爲在您的基本窗體類中受保護。刪除所有派生表單中的「組件」聲明。

呼叫鹼形式負載情況下,本方法以下,

 public void SetComponentsStyle() 
    { 
     if (null != this.components) 
     { 
      foreach (Component comp in this.components.Components) 
      { 
       if (comp is ToolTip) 
       { 

       } 
       else if (comp is ContextMenuStrip) 
       { 

       } 
      } 
     } 
    }