我想在其事件处理程序中访问控件的参数,而不提及其名称。
一个例子说清楚:
private void label1_Click(object sender, EventArgs e)
{
self.text="clicked";//pseudo code
}
我想要这样的东西,它会将label1的文本改为“点击”或我想要的任何东西。
我想这样做,因为我制作的软件包含大量标签和文本框 我更喜欢在每个事件处理程序中复制并粘贴单个代码,而不是为每个控件键入单独的代码。
这样的事情可以在C#中完成吗?我正在使用winforms。
答案 0 :(得分:7)
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";
答案 1 :(得分:1)
使用sender
参数:
private void label1_Click(object sender, EventArgs e)
{
Label self = (Label)sender;
self.text = "clicked"; //pseudo code
}
答案 2 :(得分:1)
使用sender参数:
private void label_Click(object sender, EventArgs e)
{
Label clickedLabel = sender as Label;
if(clickedLabel == null)
return;
clickedLabel.Text = "clicked"; //pseudo code
}
缓慢:(