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

本文关键字:访问控制 程序 事件处理 | 更新日期: 2023-09-27 18:23:54

我想在不提及其名称的情况下访问控件事件处理程序中的控件参数。

一个例子说明了这一点:

private void label1_Click(object sender, EventArgs e)
{
    self.text="clicked";//pseudo code
}

我想要这样的东西,将标签1的文本更改为"点击"或我想要的任何内容。

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

像这样的事情可以在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";

使用sender参数:

private void label1_Click(object sender, EventArgs e)
{
    Label self = (Label)sender;
    self.text = "clicked"; //pseudo code
}

使用sender参数:

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

减速:(