【问题标题】:Change values of dynamically added controls in winform c#.net application, how to track dynamically added controls在winform c#.net应用程序中更改动态添加的控件的值,如何跟踪动态添加的控件
【发布时间】:2011-06-28 18:06:32
【问题描述】:

我在 tableLayoutpanel 的行内动态添加了控件,添加的控件是标签、链接标签和图片框。

现在,我想通过单击按钮将这些动态添加的控件(标签、链接标签)的值(文本属性)更改为某个指定值。

我该怎么做?请帮忙写代码。

这些动态控件是否有某种 ID,就像我们在 HTML 中一样。

另外,我正在尝试使用它,但都是徒劳的............

Control[] GettableLayoutPanelControls = new Control[11];

          GettableLayoutPanelControls =  tableLayoutPanel1.Controls.Find("Control Name", true) ;

             GettableLayoutPanelControls.SetValue("CHANGED VALUE ", 0); //this line gives error..........

【问题讨论】:

    标签: c# .net winforms controls dynamically-generated


    【解决方案1】:

    尝试这样的操作,它将添加 11 个新文本框(或您想要的任何其他控件):

    int NumberOfTextBoxes = 11;
    TextBox[] DynamicTextBoxes = new TextBox[NumberOfTextBoxes];
    int ndx = 0;
    
    while (ndx < NumberOfTextBoxes) 
    {
        DynamicTextBoxes[ndx] = new TextBox();
        DynamicTextBoxes[ndx].Name = "TextBox" + ndx.ToString();
        // You can set TextBox value here:
        // DynamicTextBoxes[ndx].Text = "My Value";
        tableLayoutPanel1.Controls.Add(DynamicTextBoxes[ndx]);
        ndx++;
    }
    

    这将动态地将文本框添加到您的 TableLayout 控件。如果您以后需要检索它们:

    foreach (Control c in TableLayoutPanel1.Controls)
    {
        if (c is TextBox)
        {
            TextBox TextBoxControl = (TextBox)c;
    
            // This will modify the value of the 3rd text box we added
            if (TextBoxControl.Name.Equals("TextBox3"))      
                TextBoxControl.Text = "My Value";
        }
    }
    

    【讨论】:

    • @icemanind :先生,我也可以明智地获得控制吗?也就是说,我想获取tableLayoutPanel的ROW 1中的控件,设置它们的新值,然后获取ROW 2控件............等等......这可能吗?
    • @icemanind :另外,是否为所有必要的动态控件提供不同的名称,我可以不提供相同的名称并访问它们并为它们中的每一个设置不同的值吗,先生?
    • @sqlchild - 通过行和列访问控件有点棘手,因为 TableLayoutPanel 会根据大小动态更改其行和列。例如,位于第 2 行第 1 列的控件可能是其他人机器上的不同控件。例如,它可能位于第 1 行第 4 列。
    • 文本框 TextBoxControl = (TextBox)c; ----- 楼主,能不能给我解释一下这行代码,我是初学者,很需要!
    • @icemanind :TextBox TextBoxControl = (TextBox)c; ----- 楼主,能不能给我解释一下这行代码,我是初学者,很需要!
    【解决方案2】:

    最直接的方法是在私有字段中跟踪动态创建的控件。

    private Label _myLabel;
    _myLabel = new Label();
    myLabel.Text = "Hello World!";
    tableLayoutPanel1.Controls.Add(myLabel);
    // ... later in the button click handler ... //
    myLabel.Text = "Goodbye Cruel World!";
    

    请记住,与 ASP.NET 不同,Windows 窗体是一个有状态的环境,因此当用户与窗体交互时,字段不会丢失其值。

    预计到达时间:

    Label dynamic_label = new Label();
    for(in i =0;i<6;i++){this.Controls.Add(dynamic_label);}
    

    您评论中的这段代码添加了 SAME 标签 5 次。我不认为那是你的意图。当您设置 Text 属性时,它们都将具有相同的文本,因为它们引用了相同的控件。您可以使用我的解决方案并声明

    Label myLabel1, myLabel2, ..., myLabel5;
    

    如果你有这么多,你要在一个循环中声明它们,那么我会将它们存储在 Dictionary&lt;string, Label&gt; 中,这样你就不必搜索数组来找到正确的了。

    【讨论】:

    • 我已经完成了你所说的这个方法,但是有五个 LABELS ,同名,我想为每个按钮设置不同的值。
    • 我这样做了:标签 dynamic_label = new Label(); --- for(in i =0;i
    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2011-05-17
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多