前言:
我们在开发winform程序的过程中,经常会遇到这样一个场景,我们设计的界面,比如主窗体有一百多个TextBox,然后初始化的时候要对这个一百多个TextBox的Text属性赋值,比如赋个1,如果是winform开发的新手,这时候就会在界面上或者代码中分别给一百多个TextBox的Text属性赋值了,当你改十个TextBox的时候感觉还行,当你改到五十多个TextBox的时候就想说,去他妈的,都是什么垃圾需求,搞这么多Text搞个球啊!下面展示初学者的两种搞定这个赋值需求的方法:
1)方法一、在设计器阶段在界面上给每个TextBox赋值为1,如下图:(这里用10个TextBox举例)
该方法需要对每个控件依次赋值,可能有人说我先在界面给一个TextBox赋值,然后我直接复制、粘贴,这样变成两个,然后两个复制粘贴变成4个,这样也挺快,可是如果当你复制粘贴完了,结果有人告诉你,我要把这个“1”变成“10”,你是不是傻眼了?难道重新搞一遍吗?很显然这个方法不是一个好方法,当控件达到几百个,并且初始化值随时可能发生变化的情况下,根本玩不动啊!
1)方法二、在代码中给个TextBox赋值为1,界面不修改,如下图:
该方法不在界面赋值,而是用代码给控件赋值,如果有一百个TextBox,就要写100行代码,一千个TextBox就要写1000行代码,写个锤子啊!很显然,这个方法面对大量控件时也是很无力!
那么有没有简单一点的方法呢?下面博主就来教你两种方法,几行代码就能搞定同时给成百上千个控件(理论上可以是无数个控件)赋值。
博主推荐方法一(控件的父控件只有一个)、
假设所有的TextBox都是在Form窗体上,TextBox的父控件都是同一个,那么这里以Form1为例,代码如下:
public Form1()
{
InitializeComponent();
var controlCollection = this.Controls;//获取Form1中所有子控件
foreach (Control control in controlCollection)
{
if (control is TextBox)//如果该控件类型是TextBox,则将它的Text属性赋值为1
{
control.Text = "1";
}
}
}
上述代码是在Form1的构造函数中,首先获取Form1中所有子控件,然后判断该子控件类型是不是TextBox,如果是TextBox,则将该子控件的Text属性设置为1。这样总共用了不超过10行代码就搞定了无数TextBox的赋值问题。
博主推荐方法二(控件的父控件有很多个)、
上述代码虽然可以在一定程度上解决多个控件赋值问题,但是有一种情况它解决不了,假设,TextBox除了放在Form1上,我还有多个TextBox放在GroupBox中,GroupBox是放在From1上的,如下图:
Form1上有10个TextBox,groupBox1里面有5个TextBox,如果还运行上述的代码,则效果如下:
你会发现groupBox1里面有5个TextBox的值没有被赋值为1,这是因为groupBox1不是TextBox类型,所以不会对groupBox1中的TextBox进行赋值,那么有没有办法解决这个问题呢?答案是有的,博主写这篇文章就是来帮助大家解决这个问题的,下面看一段代码:
private void InitialTextBox(Control control )
{
if(control is TextBox)//如果该控件是TextBox,则将它的Text属性设置为1
{
control.Text = "1";
}
else
{
var controlCollection = control.Controls;//如果该控件不是TextBox,则获取它的子控件
foreach (Control subControl in controlCollection)
{
InitialTextBox(subControl);//递归调用
}
}
}
public Form1()
{
InitializeComponent();
InitialTextBox(this );//调用方法
}
上述代码中,我先定义了一个InitialTextBox的方法,然后在Form1构造函数中调用,调用时传入Form1即可,效果如下:
这时候你会发现groupBox1中的TextBox的值也被赋值为1了。上述代码的核心就是InitialTextBox方法,该方法用到了C#中的一个知识叫“递归”,递归就是用于需要嵌套访问的场合,如果你不懂递归的原理也没关系,就照抄我的模板就可以了。老铁们,以后再遇到这种需要给多个控件赋值的场景是不是一点也不慌了?哈哈!如果你也想做到“控件心中过,界面自然成”的境界,那么接着往下看哦!
博主履历介绍:
本人2017年硕士毕业,行业经验六年+,一直在自动化行业从事上位机软件开发的工作,当然运动控制和机器视觉也广泛涉及,目前也是以高级软件工程师的职位任职,薪资我就不方便透露了,你可以去招聘网站去查上位机高级软件工程师的薪资范围(只能说至少两万月薪Base),可以说理论和实战经验都比较丰富,所以我的经验对学习c#的尤其自动化行业的人极具参考价值,博主历时多年经验积累,打造了适合小白以及有一定经验工程师的《winform控件从入门到精通》系教程,限时19.9元(一顿外卖),可以说如果掌握了我的博客所有文章,你也可以达到甚至超越我的水平,原创不易,敬请谅解!本专栏会对winform中所有控件进行介绍,包括控件的属性和事件,重点是我会将控件所有属性和事件进行介绍,并且也会在专栏中增加一些案例来帮助想学习winform控件的程序员来巩固以及练习如何灵活的运用控件的各种特性来实现不同的功能,所以该专栏文章既包含了入门内容,也包含了进阶内容,对于想学习winform控件开发的程序员来说这绝对是一份非常详细的资料,您也可以将其作为自己的字典,需要使用某个功能的时候来查阅即可,当然如果您发现我的文章中有您需要的功能,但是我没有进行介绍,您可以在我的博客中留言,我会及时更新该功能,感谢大家一直以来的支持!
订阅《winform控件从入门到精通》专栏的vip成员还可享受以下增值服务:
1)进入VIP群和众多学员一起交流学习winform,c#,找工作等
2)博主会上传一些免费的学习资料帮助大家学习,比如本篇博文说的上位机源码、c#本质论的电子书籍、串口助手的源码等
3)如果遇到学习困难还可在群里@博主来帮助你。
4)qq群号:651251930
注意:只有订阅了博客专栏的学员才能进入群,加群时留下自己的博客名称即可。
1、Winform从入门到精通(27)——Label(详细版本)
2、Winform从入门到精通(2)——Button(史上最全)
3、Winform从入门到精通(3)——Form(史上最全)
4、Winform从入门到精通(4)——Textbox(史上最全)
#5、Winform从入门到精通(5)——checkBox(史上最全)
6、Winform从入门到精通(6)——radioButton(史上最全)
7、Winform从入门到精通(7)——ComboBox(史上最全)
8、Winform从入门到精通(8)——richTextBox(史上最全)
9、Winform从入门到精通(9)——ListBox(史上最全)
10、Winform从入门到精通(10)——CheckedListBox(史上最全)
11、Winform从入门到精通(11)——numericUpDown(史上最全)
12、Winform从入门到精通(12)——LinkLabel(史上最全)
13、Winform从入门到精通(13)——DateTimePicker(史上最全)
14、Winform从入门到精通(14)——NotifyIcon(史上最全)
15、Winform从入门到精通(15)——contextMenuStrip(史上最全)
16、Winform从入门到精通(16)——Timer(史上最全)
17、Winform从入门到精通(17)——PictureBox(史上最全)
18、Winform从入门到精通(18)——Chart(史上最全)
19、Winform从入门到精通(19)——DataGridView(史上最全)
20、Winform从入门到精通(20)——TableLayoutPanel(史上最全
21、Winform从入门到精通(21)——ProgressBar(史上最全)
22、Winform从入门到精通(22)——Panel(史上最全)
23、Winform从入门到精通(23)——FlowLayoutPanel(史上最全)
24、Winform从入门到精通(24)——GroupBox(史上最全)
25、Winform从入门到精通(25)——SplitContainer(史上最全)
26、Winform从入门到精通(26)——TabControl(史上最全)
27、Winform从入门到精通(28)——ToolTip(史上最全)
28、Winform从入门到精通(29)——MaskedTextBox(史上最全)
29、Winform从入门到精通(30)——MonthCalendar(史上最全)
30、Winform从入门到精通(31)——TreeView(史上最全)
更多控件持续更新中