Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其事件处理程序访问控制_C#_Winforms - Fatal编程技术网

C# 从其事件处理程序访问控制

C# 从其事件处理程序访问控制,c#,winforms,C#,Winforms,我希望访问控件事件处理程序中的控件参数,而不提及其名称 举例说明: private void label1_Click(object sender, EventArgs e) { self.text="clicked";//pseudo code } 我想要这样的东西,它可以将label1的文本更改为“clicked”或任何我想要的东西 我想这样做是因为我正在制作的软件由大量的标签和文本框组成 我更喜欢在每个事件处理程序中复制并粘贴单个代码,而不是为每个控件单独键入一个 像这样的事情可

我希望访问控件事件处理程序中的控件参数,而不提及其名称

举例说明:

private void label1_Click(object sender, EventArgs e)
{
    self.text="clicked";//pseudo code
}
我想要这样的东西,它可以将label1的文本更改为“clicked”或任何我想要的东西

我想这样做是因为我正在制作的软件由大量的标签和文本框组成 我更喜欢在每个事件处理程序中复制并粘贴单个代码,而不是为每个控件单独键入一个


像这样的事情可以用C语言完成吗?我正在使用winforms。

使用
sender
参数:

private void label1_Click(object sender, EventArgs e)
{
    Label self = (Label)sender;
    self.text = "clicked"; //pseudo code
}
private void label_Click(object sender, EventArgs e)
{
    Label clickedLabel = sender as Label;
    if(clickedLabel == null)
        return;
    clickedLabel.Text = "clicked"; //pseudo code
}

sender
参数(在Windows窗体中的几乎所有事件中)实际上是对触发事件的控件的引用

换句话说,您可以简单地将其强制转换为
控件
(或
标签
,或其他内容):

这允许您将相同的处理程序方法附加到多个控件上的事件,并使用
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";

使用发件人参数:

private void label1_Click(object sender, EventArgs e)
{
    Label self = (Label)sender;
    self.text = "clicked"; //pseudo code
}
private void label_Click(object sender, EventArgs e)
{
    Label clickedLabel = sender as Label;
    if(clickedLabel == null)
        return;
    clickedLabel.Text = "clicked"; //pseudo code
}

要减慢速度:(

将发件人强制转换为
标签。
。您完成了。