今天在做C# winform 窗体控件遍历时遇到控件顺序的问题,也就是控件被遍历的先后问题。实际情况如下所述。

窗体界面如下:

界面构成是:主界面有一个 Panel (Panel_14),Panel_14上面有13个子 Panel(Panel_1 ~ Panel_13),每个子 Panel 上有10个 TextBox,为了便于操作TextBox中的数据需要将每个子Panel中的TextBox按照顺序存储到一个TextBox二维数组中 TextBoxArray[10, 13],实现代码如下:

foreach(System.Windows.Forms.Control control in this.panel14.Controls)
{if (control is System.Windows.Forms.Panel){System.Windows.Forms.Panel p = (System.Windows.Forms.Panel)control;int i = int.Parse(p.Name.Substring(5)) - 1;int j = 0;foreach (System.Windows.Forms.Control cn in p.Controls){if (cn is System.Windows.Forms.TextBox){textBoxArray[i,j++] = (System.Windows.Forms.TextBox)cn;}}}
}

但是在实际调试时发现TextBox并没有哦按照预想的那样从上到下,从左至右一次存入TextBoxArray中,如下图所示:

红色方框的地方,Text = “29” 是Panel_2 的最后一个TextBox,但是在遍历的时候却是第一个,而且13个Panel也不是从Panel_1 到 Panel_13一次遍历的,而是第一个遍历Panel_1,第二个遍历Panel_13,第三个遍历Panel_2........,对于强迫症的我来说这是不允许的,而且这也给TextBox的数据操作带来不便,解决这种问题的方法也有很多种,例如:

1. 可以和操作 textBoxArray 的第一个纬度一样通过控件的 name 来实现,textBoxArray[int.parse(p.name.subString(5)) - 1, int.parse(textBox.name.subString(6)) - 1] = textBox;

2. 通过TextBox的 TabIndex 或者 Tag 实现,代码同1;

3. 通过修改通过修改 ...Controls.Add(...);的顺序来实现,因为控件在界面中是通过 ......Controls.Add(...);添加的,控件遍历的顺序和控件添加的顺序是一致的,先添加的先遍历,如下图:

红色方框是Panel_14中子Panel添加的顺序,所有就有了上面说的先遍历Panel_1,然后遍历Panel_13,然后遍历Panel_2...................

至此,问题得到解决。

转载于:https://www.cnblogs.com/Waming-zhen/p/10911038.html

C# 遍历窗体控件顺序问题相关推荐

  1. VC遍历窗体控件的实现

    遍历窗体所有控件代码如下: CWnd* pwndChild = GetWindow(GW_CHILD); while (pwndChild){ //....to do something pwndCh ...

  2. winform窗体控件

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  3. C#学习(十五)——窗体控件用法大全

    C#控件及常用设计整理 1.窗体 1.1.常用属性** (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗 ...

  4. office VBA 用户窗体 控件 单元格 参数的用法与注解

    目 录 编号 名称 编号 名称 编号 名称 编号 名称 编号 名称 1 错误类 2 全局变量 3 开关 4 弹窗 5 换行 6 调试打印 7 引用 8 延时 9 日志窗口显示(全局文本) 10 调用外 ...

  5. excel数据输入窗体控件_工作表数据输入或Excel用户窗体

    excel数据输入窗体控件 If you're building an Excel workbook, in which users with basic Excel skills will ente ...

  6. 递归的妙用—遍历子控件

    我们在ASP.NET编程中, 经常需要遍历一个Web控件的子控件 ,找到所需的控件并获取控件中相应的值.以前我都是采用循环的方式遍历子控件,但当子控件是复杂的树形结构,比如:子控件也有子控件,子控件的 ...

  7. 使用 .NET 框架轻松开发完美的 Web 窗体控件

    作者:David S. Platt   出自:微软 本文假定您熟悉 Visual Basic .NET.C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可 ...

  8. 主要的窗体控件的概述

    控件是包含在窗体上的对象,是构成用户界面的基本元素.控件也是设计Windows窗体引用程序的重要工具,使用控件可以减少程序设计中大量重复性的工作,有效的提高设计效率.控件通常是用来完成特定的输入输出功 ...

  9. 如何在多线程中调用winform窗体控件2——实例篇

    如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...

最新文章

  1. Yolo-FastestV2 移动端可达300FPS,参数量仅250k
  2. 钉钉猛增40倍流量压力,阿里云DBA如何应对?
  3. 网页怎么在图片上添加文字_教你同时将图片水印和文字水印添加到视频画面
  4. scikit-learn和tensorflow的区别
  5. 构建之法1,5,17章学习心得
  6. Mac M系列电脑 模拟器运行时 pods库 YYkit库报错
  7. laravel 框架命令
  8. 性能测试tps上不去,又是redis的坑,说多了都是泪啊
  9. spring boot官方配置
  10. 下载安装Vue-CLI
  11. java多线程:线程间的通信-生产者和消费者(三)
  12. 堡垒机如何传输文件_堡垒机环境下使用putty传输文件
  13. Android Navigation使用
  14. java论坛怎么屏蔽脏话,又见牛人!Python写各大聊天系统屏蔽脏话功能……
  15. 馈线自动化的主要采用计算机技术,配电及馈线自动化技术探讨
  16. 流媒体之DirectShow——视频采集
  17. 多个目标优化的帕累托前沿面如何可视化
  18. INF文件详解(32位64位兼容INF)
  19. 秒杀抢购场景下防止商品超卖的技术实现思路
  20. 《网络下单销售系统》项目研发性总结

热门文章

  1. DHCP Option 60 的理解
  2. 生理性玻璃体混浊的分类与预防控制
  3. flink的dataset/stream/sql三套API的选择以及是否应该阅读源码
  4. No plugin found for prefix ‘compile‘ in the current project
  5. Hive on Tez出现exec.Task: Failed to execute tez graph. java.lang.NullPointerException
  6. ubuntu19.10安装thrift
  7. QuorumPeerMain数量可否和HRegionServer节点数量不一致?
  8. awk输出csv的一列
  9. 用scikit-learn进行LDA降维(转载+注释)
  10. sklearn的KNN文档中实例代码的注释