2012-04-30 6 views
0

Windows Forms Designerに、同様のコンポーネントの配列(または他のコレクション)を定義する良い方法はありますか? "GenerateMember"をチェックすると、参照するコード内に一意の名前付きメンバを付けることができますが、生成されたメンバをソートのリストの1つにしたい場合はどうすれば簡単に繰り返すことができますか?私が考えることができる唯一の方法は、読み込み時に新しいリストを作成し、既にリストされているすべてのメンバーを手動で追加することです。これは面倒で冗長です。私はこれらのコンポーネントを生成するコードを編集することを考えましたが、自動生成された「Do not modify」セクションの内部にあり、フォームに他の変更を加えるたびに上書きされることを恐れています。フォームデザイナーはこの機能を持っていませんか?フォームデザイナのコンポーネントの配列

答えて

1

私はあなたの質問を正しく理解している場合は、単に "this"(フォーム)を "コントロール"にキャストし、 "ControlCollection"プロパティ - フォームのコントロールを含むコレクションを調べることができます。例えば。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     var myControlList = ((Control)this).Controls; 
    } 
} 

私は何か...

+0

うーん、この中華鍋をしないのですが、それは少しハック思わない限り - まず、私は私はその後、コンテナ(ここではない「この」が、TableLayoutPanel)をキャストする必要がありこれらの要素をそれぞれキャストする必要があります(この場合はPictureBoxです)。私はいつも奇妙な感じがします。ちょっと "安全でない"ようです。確かに、それがそれを行う唯一の方法なら、それは大丈夫だと思います。 –

+0

キャストは「変換」と同じではないことを覚えておいてください。既存のインターフェイスへの参照のみを取得するため、パフォーマンスに問題はありません。しかし、なぜあなたは配列を必要としているのか、私は理解していません。コンテナの子を繰り返し処理できますか?私はあなたが達成しようとしていることをよりよく理解するために、いくつかのコードを見る必要があるかもしれません。 –

+0

実際にネストされたいくつかのレイヤー深さ - テーブル内のテーブル内のテーブル、および私はこの場合、最も深いものに気を付けるだけです。私は90個のPictureBoxをForms Designerであらかじめ作成しておくのではなく、手動で作成するようにリファクタリングしました。 (リストはいくらか扱いにくくなっていました。)それでも、私はそのレベルまで下がるために多くのリファレンスをコピーしているようですが、何とか(あなた自身のメモリを管理しなければならないC/C++ワークフローから来ています) 1バイトあたり4バイトしかないかもしれませんが、それでもやや効率が悪いようです。 –

0

Panel内に配置し、コントロールを反復することができます。

関連する問題