1

たとえば、グリッド (5 行、5 列) のように形成された 25 のパネルを取得します。取得したいパネルの 1 つをクリックすると、上のパネルも取得できます。最初に、PanelX1Y1、PanelX1Y2 などの位置のようにパネルに名前を付けました...次に、名前から座標を取り出して新しい座標を作成しました...そして新しい名前を取得した後、foreach ループを使用してすべてを調べましたアイテムを見つけて、正しい名前のアイテムを入手してください。

私はすでにwinformsの位置でそれを試したので、クリックした1つのaddetの位置、たとえば25ピクセルを取り、フォーム内のすべてのアイテムを切り取り、それらの場所を介してそれらをチェックしました。

しかし、私はすべてのアイテムをループしたくありません...すべてのアイテムをループしてそれらの名前を確認するためにその名前がわかっている場合、どうすればアイテムを取得できますか..

これを使用できますか: this.Controls["name"];

大丈夫、私のグリッド: p11 p12 p13 p21 p22 p23 p31 p32 p33

p31をクリックすると、p31とp21で何かを変更したいので、オブジェクトp21が必要です

4

2 に答える 2

1

質問に直接答えるには、クラスのFind()メソッドを使用できます。ControlCollection例えば:

myForm.Controls.Find("panelX1Y2")

より良い方法を提案するには、このようなものに文字列を使用しないでください。ハックでずさんです。

代わりに、パネルを 2D 配列で初期化し、配列インデックスを使用して適切なパネルを見つけます。

于 2012-09-13T07:57:02.637 に答える
-1

辞書を使えませんか?これが重要な場合、辞書は順序付けされていないことに注意してください。

 Dictionary<string, Panel> dcPanels = new Dictionary<string, Panel>();
 dcPanels.Add("GridA", new Panel());
 Panel p = dcPanels["GridA"];
于 2012-09-13T07:45:57.650 に答える