ケリ技術交流グループ:460 189 483
C#の横断すべてのコントロールは、すべてのコントロールを形成するか、または入力します
-
//すべてのコントロールのフォームを横断し、
-
foreachの(コントロール制御でthis.Controls)
-
{
-
//後のトラバース操作...
-
control.Enabled = falseは、
-
}
-
パネル内のすべてのコントロールを
-
-
foreachの(コントロール制御でthis.panel4.Controls)
-
{
-
control.Enabled = falseは、
-
}
-
すべてのTextBoxコントロールまたはすべてのタイプのDateTimePickerコントロールを通じ
-
-
コードをコピー
-
foreachの(コントロール制御でthis.Controls)
-
{
-
//すべてのTextBoxをループ...
-
(コントロールがあればテキストボックスです)
-
{
-
テキストボックスT =(テキストボックス)コントロール。
-
= t.Enabled 偽;
-
}
-
//すべてのDateTimePickerをループ...
-
(コントロールがある場合のDateTimePickerです)
-
{
-
DateTimePickerのD =(のDateTimePicker)コントロール;
-
d.Enabled = falseは、
-
}
-
}
ボーエンは、主に、これらの2つの方法が制御を得るための方法を比較するために、以下の図面を制御します。
1.最も簡単な方法:
-
プライベート無効GetControls1(コントロールfatherControl)
-
{
-
Control.ControlCollection sonControls = fatherControl.Controls。
-
//コントロールのすべてをループ
-
foreachの(コントロール制御sonControls中)
-
{
-
listBox1.Items.Add(control.Name)。
-
}
-
}
結果:
リストボックスに示された結果は、権利を取得し、あなたはありません取得した子コントロールパネル、グループボックス、コントロールのようなタブコントロールを見つけることができます。
オリジナルの再帰的な方法で2増加:
-
プライベート無効GetControls1(コントロールfatherControl)
-
{
-
Control.ControlCollection sonControls = fatherControl.Controls。
-
//コントロールのすべてをループ
-
foreachの(コントロール制御sonControls中)
-
{
-
listBox1.Items.Add(control.Name)。
-
(control.Controls!=の場合はnull)
-
{
-
GetControls1(対照)。
-
}
-
}
-
}
結果:
コントロールの大半を取得することがありますが、2つのコントロールタイマー、いるContextMenuStripを取得していないが残っています。
3.反射(反射)
-
プライベート無効GetControls2 (コントロールfatherControl)
-
{
-
//反射
-
System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
-
for (int i = 0; i < fieldInfo.Length; i++)
-
{
-
listBox1.Items.Add(fieldInfo[i].Name);
-
}
-
}
结果:
结果显示所有控件都被获取到了。