winform 动态生成的控件 如何取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform 动态生成的控件 如何取值相关的知识,希望对你有一定的参考价值。

动态生成多个textbox combobox 控件 如何获取它们的值拼接后赋值给label进行显示

参考技术A 定义一个字符串变量
利用循环在循环中用变量+=textbox和comboobx控件的Text属性
最后让label的Text属性=字符串变量追问

string txbName = this.comboBox1.Text;
Point pt = new Point(0, 0);
TextBox txtbox = new TextBox();
this.flowLayoutPanel1.Controls.Add(txtbox);
txtbox.Text = txbName;
txtbox.Name = textBoxName;
txtbox.Location = pt;
txtbox.Width = 150;
txtbox.Height = 20;
这是我的代码 根据这段代码应该怎么解决呢

参考技术B public partial class Form1 : Form

public static int count =0;//记录textBox实例生成数
public List<TextBox> lb = new List<TextBox>(); //list的初始化
public Form1()

InitializeComponent();


private void textBox1_TextChanged(object sender, EventArgs e)

label1.Text = "";//label1de初始化


private void button1_Click(object sender, EventArgs e)//button1触发创建textbox实例事件


TextBox t_textBox = new TextBox();
t_textBox.Text = count.ToString();
t_textBox.Location = new Point(0, 0 + 50 * count);//这样做比较好区分各各textbox的控件
this.Controls.Add(t_textBox);//放入form1窗体中
lb.Add(t_textBox);//存进之前实例化的list泛型类中

count++;


private void button2_Click(object sender, EventArgs e)//button2用来遍历已创建textbox控件

foreach (TextBox t_tb in lb)

label1.Text += t_tb.Text;




combox的也是同理,还有不懂的欢迎提问追问

this.label1.Text = this.flowLayoutPanel1.Controls[1].ToString();
我现在是这样取的值。因为需要动态生成很多控件。而我现在需要取到的值是第一个动态控件Textbox里的内容。
不过现在label1.Text 的内容是这样的:"System.Windows.Forms.TextBox, Text: 套口"
套口是我最终需要的 请问如何把前面那段去掉只取出 我需要的呢 或者 是我哪里弄错了呢?

追答

不要直接将你需要操作的控件toString(),那样只会得到控件的实例化名称,你的目标是取得textBox里的text属性的值。而你又是通过控件组遍历的,给你个建议。用is关键字去约束。
foreach(Controls ctl in this.flowLayoutPanel1.Controls)

if(ctl is textBox)

label1.Text+= ctl.Text;

参考资料:人脑

追问

我刚刚已经解决了 不过还是谢谢你 你这个建议我试一下

参考资料:人脑

本回答被提问者采纳
参考技术C 生成时,设置其TextChanged事件,在此事件中给label赋值。

winform 动态生成自定义控件添加单击事件无效

private void Form1_Load(object sender, EventArgs e)

newButton[,] bt = new newButton[6, 6];
for (int i = 0; i < 6; i++)

for (int j = 0; j < 6; j++)

bt[i, j] = new newButton();
bt[i, j].Width = 50;
bt[i, j].Height = 50;
bt[i, j].Top = i * 50;
bt[i, j].Left = j * 50;
this.Controls.Add(bt[i, j]);
bt[i, j].Click += new EventHandler(Button_Click);



private void Button_Click(object sender,EventArgs e)

MessageBox.Show("aaaa");

说明:自定义了一个button控件,仅仅只是在button控件的基础上添加了一个可读可写的属性,新生成的控件取名为newButton。但是下面这个代码无效,
bt[i, j].Click += new EventHandler(Button_Click);
如果将newButton换成button的话这个代码就是有效的,
蛋疼了半天,求高手讲解下原因,或指定一下方向。
自定义控件,仅仅加了个isMine
namespace MyButton

public partial class newButton : UserControl

public newButton()

InitializeComponent();

private void UserControl1_Load(object sender, EventArgs e)


private int isMine=0;
public int IsMine

get return isMine;
set isMine = value;


我试过是可以的,
在你的自定义newButton加这么一句也许更好
private void newButton_Load(object sender, EventArgs e)

this.BackColor = Color.Blue;

另外,为什么你定义newButton 要继承自UserControl而不是button?追问

感谢啊,终于解决了问题
之前自定义控件时只写过书上的几个例子,没注意newButton的继承问题。
不过二维数组倒是没问题,我是用它来动态生成button。

参考技术A 有一个错误,动态添加控件,需要指定控件的Name属性,不能重复。 参考技术B 你的newButton的定义,可以发出来看看追问

定义已发

以上是关于winform 动态生成的控件 如何取值的主要内容,如果未能解决你的问题,请参考以下文章

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小

winform怎么动态生成多个panel控件,并且生成两个控件换一行呢?

winform WebBrowser控件中,cs后台代码执行动态生成的js

winform 动态生成自定义控件添加单击事件无效

C# WinForm 如何动态添加控件和设计控件布局

C# WinForm 动态添加-删除控件内存未释放