更改面板中运行时的Label文本

时间:2014-04-05 08:48:06

标签: c# c#-3.0

我正在创建Panel列表。每个面板都包含一个标签和按钮。我还有一个Button(button1)。我想在单击button1时更改(panels [0])的标签文本。我怎么能这样做。这是我的c#代码:

List<Panel> panels = new List<Panel>();    
 private void Panel()
            {

                var x = 0;
                for (int i = 1; i < 5; i++)
                {
                    x += 60;
                    var panel1 = new Panel() { Size = new Size(60, 140), Location = new Point(x, 100), BorderStyle = BorderStyle.FixedSingle };
                    panel1.Name = "pan" + i;


                    Label lbl = new Label();
                    lbl.Name = "lbl" + i;
                    lbl.Text = i.ToString();
                    lbl.Location = new Point(10, 20);
                    panel1.Controls.Add(lbl);

                    Button button = new Button();
                    button.Location = new Point(10, 90);
                    button.Size = new Size(40, 40);
                    button.Text = "Click";

                    panel1.Controls.Add(button);



                    panels.Add(panel1);
                    Controls.Add(panel1);
                }
            }






     private void button1_Click(object sender, EventArgs e)
        {



            foreach (var p in panels)
            {


            }



        }

输出:

enter image description here

但是我想,当我点击button1时,它会改变零索引面板的标签文本(我用红色标记指出了它)。

enter image description here

任何人都可以帮助我......

3 个答案:

答案 0 :(得分:3)

如果您不存储对Label的引用,那么您可以按类型在第一个Panel的控件中找到它,例如:

panels[0].Controls.OfType<Label>().First().Text = "New Text";

或按名称

panels[0].Controls.OfType<Label>().Single(l => l.Name == "lbl1").Text = "New Text";

答案 1 :(得分:3)

好的,所以你在面板中有一个按钮和一个标签。当您单击面板的按钮时,您想对同一面板中的标签执行某些操作,对吗?

所以

private void BtnClick(object sender, EventArgs e) {
  var button = (Button)sender;//you've got the button clicked
  var panel = button.Parent;//you've got the panel.
  //var label = panel.Controls.OfType<Label>().FirstOrDefault();//but don't think you get this in c# 3.0
  var label = GetFirstLabel(panel);
  if (label != null)
     label.Text = "something";
}

private Label GetFirstLabel(Control parent) {
   foreach (var control in parent.Controls) {
       if (control is Label) return control as Label;
   }
   return null;
}

用法

添加按钮后,您现在可以

 Button button = new Button();
 button.Location = new Point(10, 90);
 button.Size = new Size(40, 40);
 button.Text = "Click";
 button.Click += BtnClick;

这适用于所有小组。

答案 2 :(得分:2)

你可以用一个简单的方法来做到这一点:

private void button1_Click(object sender, EventArgs e)
{
    Label l = panels[0].Controls.Find("lbl1", false).FirstOrDefault() as Label;
    l.Text = "TEXT";
}