2008-08-27 22 views
1

プロジェクトのフォームの数は、基本フォームから継承します。派生したフォームのControlsコレクションには簡単にアクセスできますが、VSはこれを非公開としてマークしているため、Componentsコレクションに簡単にアクセスできませんでした。基本フォームから継承されたフォームのコンポーネントへのアクセス

私はこれを反射で行うことができると仮定していますが、私はそれについて前にリフレクションに取り組んでいないと、実際にはいかがですか。

今、私は、関数GetComponentsをオーバーライドし、興味のあるコンポーネントの配列を返す、一種の厄介な回避策を使用しています。これは明らかにエラーを起こす可能性があります。オーバーライドされた関数を実装するか、コンポーネントが追加されたときに更新します。

誰かがヒントを持っているか、より良い方法を提案できれば、嬉しいです。

答えて

0

関数をオーバーライドすることを忘れている場合は、抽象化してください。

1

コンポーネントの修飾子プロパティをstrictに設定すると、コンポーネントコレクションを使用せずにアクセスできます。

編集: リフェラルを使用して各フィールドを処理できます。あなたの場合はそれが最適ではないかもしれませんが。

0

基本フォームクラスで 'components'修飾子をprotectedに設定します。すべての派生フォームで 'components'宣言を削除します。

コールベースフォームロードイベントでこの方法以下、

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

       } 
       else if (comp is ContextMenuStrip) 
       { 

       } 
      } 
     } 
    } 
関連する問題