我正在创建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)
{
}
}
输出:
但是我想,当我点击button1时,它会改变零索引面板的标签文本(我用红色标记指出了它)。
任何人都可以帮助我......
答案 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";
}