我是靠谱客的博主 平淡机器猫,这篇文章主要介绍C# WinForm遍历窗体控件的3种方法,现在分享给大家,希望可以做个参考。

1.循环遍历

复制代码
1
2
3
4
5
6
7
8
private void GetControls(Control fatherControl) { Control.ControlCollection sonControls = fatherControl.Controls; foreach (Control control in sonControls) { listBox1.Items.Add(control.Name); } }

结果:能获取到Panel、GroupBox、TabControl等控件
问题:Panel等控件上面的子控件获取不到

2.递归遍历

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
private void GetControls(Control fatherControl) { Control.ControlCollection sonControls = fatherControl.Controls; foreach (Control control in sonControls) { listBox1.Items.Add(control.Name); if (control.Controls != null) { GetControls(control); } } }

结果:能获取到绝大多数控件
问题:Timer、ContextMenuStrip等控件获取不到

3.使用反射

复制代码
1
2
3
4
5
6
7
8
private void GetControls(Control fatherControl) { System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); for (int i = 0; i < fieldInfo.Length; i++) { listBox1.Items.Add(fieldInfo[i].Name); } }

结果:所有控件都被获取到了

DevExpress控件无法使用this.Controls进行遍历,只能通过反射的方法获得,如下代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void SearchBarManager() { Type FormType = this.GetType(); FieldInfo[] fi = FormType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); foreach (FieldInfo info in fi) { if (info.FieldType == typeof(DevExpress.XtraBars.BarManager)) { DevExpress.XtraBars.BarManager bar = (info.GetValue(this)) as DevExpress.XtraBars.BarManager; foreach (DevExpress.XtraBars.BarItem bi in bar.Items) { MessageBox.Show(bi.Name); } } } }

以上就是C# WinForm遍历窗体控件的3种方法的详细内容,更多关于WinForm遍历窗体控件的资料请关注靠谱客其它相关文章!

最后

以上就是平淡机器猫最近收集整理的关于C# WinForm遍历窗体控件的3种方法的全部内容,更多相关C#内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(102)

评论列表共有 0 条评论

立即
投稿
返回
顶部