C# 遍历窗体控件顺序问题
今天在做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()) - ;
int j = ;
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...................
至此,问题得到解决。
C# 遍历窗体控件顺序问题的更多相关文章
- C#遍历窗体控件(原文出自http://www.liangshunet.com/ca/201403/286434593.htm)
一.C#遍历窗体控件 主要遍历属于窗体(Form)的控件(Controls),假如窗体中有 Panel.Button 和 TextBox 控件,遍历代码如下: /// <summary> ...
- VC遍历窗体控件的实现
最近在写控制台,在设计界面按钮风格时不想通过每个按钮的ID来获取其句柄,而是通过遍历窗体所有控件,然后判断其控件类型进而来实现. 代码如下: // 遍历得到页面中的所有Button控件,依次设定其样式 ...
- c# 遍历子控件,比如Form下的group,或者panel
方法很好用.目的是遍历所有容器的子控件... 方法1private void GetControl(Control.ControlCollection ctc, ref int checkNull) ...
- 窗体控件 回车事件 分类: WinForm 2014-11-21 10:45 233人阅读 评论(0) 收藏
说明: (1)设置窗体控件的TabIndex属性,(按回车顺序设置TabIndex的大小) (2)修改窗体的一个属性:KeyPreview=true //protected override void ...
- C# winform 跨线程更改窗体控件的属性
当winform程序中新开一个线程,是无法改变主线程中窗体控件的属性的,否则运行时会报错. 若想在其他线程中控制主线程中的窗体控件,则必须利用BeginInvoke方法. 例如:添加一个名为textb ...
- winform窗体控件(全)
回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...
- (转)sl简单自定义win窗体控件
sl简单自定义win窗体控件 相信大家接触过不少win窗体控件ChildWin子窗口就的sl自带的一个 而且网上也有很多类似的控件,而今天我和大家分享下自己制作个win窗体控件,希望对初学 ...
- 如何:对 Windows 窗体控件进行线程安全调用
http://msdn.microsoft.com/zh-cn/library/ms171728(VS.90).aspx http://msdn.microsoft.com/zh-cn/library ...
- C# 静态函数调用窗体控件
回调函数方法是静态函数,需要调用窗体控件,赋值或取值. 定义 public static Form1 mainFrm; mainFrm = this; public partial class F ...
随机推荐
- WPF Opacity 最小值多少会被击穿
粗略测试 这样也行.再小不懂咯(跟Double精度有关???) <WrapPanel.Background> <SolidColorBrush x:Name="opacit ...
- SystemServer概述
SystemServer由Zygote fork生成的,进程名为system_server,该进程承载着framework的核心服务. 调用流程如下: 上图前4步骤(即颜色为紫色的流程)运行在是Zyg ...
- 从研究try catch 捕获不到异步错误谈谈学习方法的问题
先看下面的代码,思考一下输出 try { throw new Error(3) } catch (e) { console.log(e) } try { setTimeout(function () ...
- 原生H5页面模拟APP左侧滑动删除效果
话不多说,往左侧滑动,显示删除,我们先来看一下效果图:如下: 这个布局我就不多说,反正就是一行ul,li, class名“item” js代码如下: $(".item").on(& ...
- 【32.89%】【codeforces 574D】Bear and Blocks
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【38.46%】【codeforces 615E】Hexagons
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- PL/SQL Developer跑在Oracle 64位数据库上初始化错误
安装完Oracle(64位).PL/SQL Developer后执行PL/SQL出现例如以下的错误: 网上查资料说,我的PL/SQL Developer与ORACLE不兼容,即PL/SQL不支持64位 ...
- C#7
C#7 阅读目录 out变量 元组(Tuples) 模式匹配(Pattern matching) 本地引用和返回(Ref locals and returns) 本地函数(Local function ...
- this指的是,调用函数的那个对象。
恩 http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
- WPF Bind 绑定
原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/74332515 用过W ...