• ベストアンサー

c# ドッキングしているコントロールを取得するには

 こんにちは。c#初心者です。  コントロールを制作しているのですが、その途中で「System.Windows.Forms.Splitter」のようにドッキングしているコントロールに対して働き掛ける処理で、そのドッキングしているコントロールを取得する方法が分からず苦戦しています。  視覚化すると、□を現在制作中の「SampleControl」、■を任意の「Control」、■、□共に「Dockプロパティ」が「DockType.Left」とすると、 ■□ のように並んでいる際に□内部で■を取得する方法です。  どなたか詳しい方がいらっしゃいましたら教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.dock.aspx によるとzオーダーに従って並べられるそうなので、Dock = DockStyle.Left、かつ、zオーダーが自分より大きいコントロールの中で、zオーダーが最小のものが左隣のコントロールになるようです。 少しだけ試してみたところ、Controls を foreach で回すとzオーダーの順で取得できるようなので、 次のようにするとできるようです。(確認が十分ではありません。) Form f = this.ParentForm; int myIndex = f.Controls.GetChildIndex(this); foreach (Control child in f.Controls) { if (child.Dock == DockStyle.Left) { if (myIndex < f.Controls.GetChildIndex(child)) { MessageBox.Show(child.Name); break; } } }

koumei000
質問者

お礼

 解答ありがとうございます。  おかげさまでうまくいきました。