gpt4 book ai didi

C#自动生成EventHandler

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:44 25 4
gpt4 key购买 nike

我有一个逐行读取文件的程序,并将字符串放入 tableLayoutPanel 中,但是如何为 tableLayoutPanel 中的每个标签创建一个事件处理程序?

这是我使用的代码:

Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);

每个标签都需要打开一个网页,url必须是它自己的文本。

我已经试过了:

foreach (Control x in panel1.Controls)
{
label.Click += HandleClick;
}

private void HandleClick(object sender, EventArgs e)
{
messageBox.Show("Hello World!");
}

它就是行不通。


新问题:

主要问题被Jay Walker解决了,但是现在我又遇到了一个问题。并非所有标签都适用于 eventHandler。这是主要代码:

string line;
System.IO.StreamReader file = new System.IO.StreamReader("research.dat");
while ((line = file.ReadLine()) != null)
{
Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;

label.Click += HandleClick;

tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
}

结合:

    private void HandleClick(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.White;
}

有些标签背景会变成白色,而相同的则不会。

最佳答案

为什么不在创建标签时添加处理程序,而不是稍后通过控件循环添加处理程序(您可能应该引用 x 而不是 label

Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
// add the handler here
label.Click += HandleClick;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);

关于C#自动生成EventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187849/

25 4 0