私の WinForm には、Panel、SpliContainer、StatusStrip などのいくつかのコンテナーがあります。これらの各コンテナーには、ボタンやテキスト ボックスなどの基本的な要素が含まれています。コントロールを見つけるには、すべてのフォーム コントロール (Panels、SplitContainers、StatusStrip 内のものも含む) を反復処理する必要があります。再帰関数で試してみます
ListAllControls(Control MainControl)
{
foreach (Control control in MainControl.Controls)
{
if (control.HasChildren)
{
ListAllControls(control);
}
else
{
// do something with this control
}
}
}
しかし、コンテナにあるコントロールを取得できません!?
アップデート:
SplitContainer、Panel、および StatusStrip を含む Form があります。これらの各コントロールには、StatuStrip1 の toolStripStatusLabel1 のようないくつかの子コントロールがあります。問題は、たとえば、関数 ListAllControls を介して StatuStrip のコントロール toolStripStatusLabel1 を見つけようとすると、見つからない!? フォームからすべてのコントロールを取得する別の方法はわかりません。完全なコードは次のとおりです。
class Control_Finder
{
private Control founded_control = null;
public Control Founded_Control
{
get { return founded_control; }
}
public void ListAllControls(Control MainControl, string SearchForControl)
{
foreach (Control control in MainControl.Controls)
{
if (control.HasChildren)
{
ListAllControls(control, SearchForControl);
}
else
{
// check if control has searched name
if (control.Name == SearchForControl)
{
founded_control = control;
return;
}
}
}
}
} // class
サンプル:
Form Me = this;
Control_Finder Test = new Control_Finder();
Test.ListAllControls(Me, "toolStripStatusLabel1");
if (Test.Founded_Control != null)
{
MessageBox.Show("I found control " + Test.Founded_Control.Name + "!");
}
else
{
MessageBox.Show("Didn't found! :(");
}
このサンプルでは、見つかりませんでした :(しかし、StatusStrip1 を使用すると、「コントロール StatusStrip1 が見つかりました!」 という質問が以前よりも明確になることを願っています。