求助:给动态生成的多个控件批量赋值的问题

tj_iceman2008 2014-08-18 03:10:23
批量生成一些textbox,然后对这些控件进行赋值,我的代码是这样的:
private void frmVote_Load(object sender, EventArgs e)
{
int i;
for (i = 0; i < 10; i++)
{
myControl zh = new myControl(); //myControl()是包含一个label和一个textbox的用户控件
zh.myLabel.Text = string.Format("项目{0}", i + 1);
zh.myTextbox.Text = "分数";
zh.myTextbox.Name = string.Format("txtbox{0}", i + 1);
zh.myLabel.Name = string.Format("lbbox{0}", i + 1);
this.flowLayoutPanel1.Controls.Add(zh);
};
this.flowLayoutPanel1.Refresh();
}
//下面是重置按钮,重置所有生成的textbox的值为0
private void btnClear_Click(object sender, EventArgs e)
{
Control.ControlCollection cc = this.flowLayoutPanel1.Controls;
foreach (Control con in cc)
{
if (con is TextBox)
{
con.text =0;
}
// else { MessageBox.Show("没有找到文本框!"); }
}
}
运行后点击重置按钮没有反应,不知为何,请高手指点啊!!!
...全文
191 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tj_iceman2008 2014-08-18
  • 打赏
  • 举报
回复
引用 10 楼 andywangguanxi 的回复:
你用自定义控件肯定是有问题的。foreach在panel里面遍历到的是你的myControl,他根本就没有Text属性,你要改的是myControl里面的TextBox的Text的属性。改一下Clear按钮下的代码。

            UserControl.ControlCollection cc = this.flowLayoutPanel1.Controls;
            foreach (UserControl con in cc)
            {
                if (con is UserControl)
                {
                    con.Controls[0].Text = "0";
                }
                // else { MessageBox.Show("没有找到文本框!"); }
            }
高手啊,问题解决了!谢谢!
EdsionWang 2014-08-18
  • 打赏
  • 举报
回复
你用自定义控件肯定是有问题的。foreach在panel里面遍历到的是你的myControl,他根本就没有Text属性,你要改的是myControl里面的TextBox的Text的属性。改一下Clear按钮下的代码。

            UserControl.ControlCollection cc = this.flowLayoutPanel1.Controls;
            foreach (UserControl con in cc)
            {
                if (con is UserControl)
                {
                    con.Controls[0].Text = "0";
                }
                // else { MessageBox.Show("没有找到文本框!"); }
            }
assky124 2014-08-18
  • 打赏
  • 举报
回复

    public partial class Form1 : HSEI.Windows.Forms.RobbinForm
    {
        private List<TextBox> tbList = new List<TextBox>();

        public Form1()
        {
            InitializeComponent();
            Init();
        }

        private void Init()
        {
            for(int i=0;i<10;i++)
            {
                TextBox tb = new TextBox();
                tb.Text = "";
                tbList.Add(tb);
                //TODO Layot Add Control
            }
        }

        private void Reset()
        {
            foreach(var tb in tbList)
            {
                tb.Text = "0";
            }
        }
    }
你的程序中把TextBox换成自定义控件就行了
tj_iceman2008 2014-08-18
  • 打赏
  • 举报
回复
引用 7 楼 xianfajushi 的回复:
除了这句要纠正外con.text =0;改为con.Text = "0"; 虽然没你那个控件,用普通TextBox测试代码没问题.
哦,难道是我的控件有问题么? 我的控件代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Login { public partial class myControl : UserControl { public myControl() { InitializeComponent(); } public TextBox myTextbox{ get { return textBox1; } set { textBox1 = value; } } public Label myLabel{ get { return label1; } set { label1 = value; } } private void myControl_Load(object sender, EventArgs e) { } } }
  • 打赏
  • 举报
回复
除了这句要纠正外con.text =0;改为con.Text = "0"; 虽然没你那个控件,用普通TextBox测试代码没问题.
tj_iceman2008 2014-08-18
  • 打赏
  • 举报
回复
加上 else { MessageBox.Show("没有找到文本框!"); }之后,运行提示“没有找到文本框”,不知为何。
tj_iceman2008 2014-08-18
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
this.flowLayoutPanel1.Refresh(); 赋值完执行一下这个试试
这个也试过,还是不行
tj_iceman2008 2014-08-18
  • 打赏
  • 举报
回复
引用 3 楼 slyzly 的回复:
con.text =0;修改为 con.Text="0";
改过了,也不行。
事理 2014-08-18
  • 打赏
  • 举报
回复
con.text =0;修改为 con.Text="0";
於黾 2014-08-18
  • 打赏
  • 举报
回复
this.flowLayoutPanel1.Refresh(); 赋值完执行一下这个试试
bdmh 2014-08-18
  • 打赏
  • 举报
回复
你可以将新建的组件放到一个List中,你遍历就行了,或者给它们起一个有规律的name,然后通过Controls[名字] 找到

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧