1

SplitContainerを持つ Windows フォームがあります。このSplitContainerには他のパネルがあります。

Panel1には、というカスタム コントロールInputControlと というTextBoxDisplayが含まれています。

現在表示されている項目を確認するために、GetChildIndex メソッドに目を向け、Windows フォームを親として使用しました。

int inputIndex = parent.Controls.GetChildIndex(InputControl);
int displayIndex = parent.Controls.GetChildIndex(Display);

これをコーディングしていたとき、Windows フォームを親として渡すことができるかどうか確信が持てなかったので、後でブレークポイントを設定して、2 つのインデックスが -1 より大きいことを確認しました。

      if ((-1 < inputIndex) && (-1 < displayIndex)) {

ただし、最初の整数inputIndexに値が割り当てられる前に、私の努力に対して次のメッセージとともにArgumentExceptionが与えられました。

「子」は、この親の子コントロールではありません。

OK、これらはこの親の直接の子コントロールではないと思います。

一方、 SplitContainerは確かに直接の子コントロールです。では、 SplitContainerコントロールを検索する必要がありますか?

ただし、技術的には、z-index が必要なコントロールはPanel1コントロールにあります。それは私のコードがこれほど醜く見えなければならないということですか?

int inputIndex = splitControl1.Panel1.Controls.GetChildIndex(InputControl);
int displayIndex = splitControl1.Panel1.Controls.GetChildIndex(Display);

これは、私の 2 つのコントロールの z-index を取得する方法としては非常に役に立たないようです。

どのコントロールが一番上にあるかを追跡するために自分のコードを書く以外に、これを行う簡単な方法はありますか?

コントロールが直接の子コントロールであるか、親の他の子孫であるかに関係なく、任意のコントロールの z-index を返す Microsoft メソッドが必要です。答えは、まず、これを知っている人に授与されます。

それが存在しない場合、再帰ループを作成せずにどのように記述しますか? 既存の Microsoft の方法がない場合、これは授与された回答として機能します。

再帰ループが必要な場合は、最適な再帰ループを示します (場合によっては回答します)。

4

2 に答える 2

1

splitcontainer またはその他のコンテナーがある場合、親コントロール (例: Form1) のコントロールに基づいてタブインデックスを受け取ります。例: 2 つのボタン、1 つのテキストボックス、および分割コンテナーを含む Form1 -それらを配置した順序または順序を編集した場合。 .. button1 tabindex は 0、button2 1、textbox 2、splitcontainer 3 になります。

ここで、splitcontainer 内に 2 つのパネル (1 と 2) があり、適切なインデックスを受け取ります....splitcontainer.panel1 は 3,0 の tabindex を受け取り、splitcontainer.panel2 は 3,1 になります...それぞれの中にコントロールを配置すると、内部にあるコントロールの数に応じて、タブインデックスが 3,0,0 または 3,0,1 になりますが、独自のインデックスを持つ「フォーム」のようなコンテナについて考えると思います。

例: int y = this.Controls.Find("表示", true).Single(x => x.Name == "表示").TabIndex;

これにより、コントロールがオンになっている分割コンテナーのパネル内のインデックスが取得されます。

マイケル・ガンターの答えは正しいものです。これが少し役立つことを願っています

于 2013-06-06T16:39:35.917 に答える