我想在不提及其名称的情况下访问其事件处理程序中控件的参数。
举个例子就很清楚了:
private void label1_Click(object sender, EventArgs e)
{
self.text="clicked";//pseudo code
}
我想要这样的东西,它将 label1 的文本更改为“已单击”或任何我想要的内容。
我想这样做是因为我正在制作的软件包含大量标签和文本框 我更喜欢在每个事件处理程序中复制并粘贴单个代码,而不是为每个控件单独键入一个代码。
在 C# 中可以完成这样的事情吗?我正在使用 winforms。
最佳答案
sender
参数(几乎在 Windows 窗体中的所有事件中都有)实际上是对触发事件的控件的引用。
换句话说,您可以简单地将其转换为Control
(或Label
,或其他):
private void label1_Click(object sender, EventArgs e)
{
var ctrl = sender as Control; // or (Control)sender
ctrl.Text = "clicked";
}
这允许您将相同的处理程序方法附加到多个控件上的事件,并使用 sender
参数区分它们:
// the `label_Click` method gets called when you click on each of these controls
label1.Click += label_Click;
label2.Click += label_Click;
label3.Click += label_Click;
如果您想完全避免转换,另一种方法可能是使用 lambda 来捕获父控件:
label1.Click += (sender, args) => label1.Text = "Clicked";
关于c# - 从其事件处理程序访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25949056/