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

标签 c# winforms

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

举个例子就很清楚了:

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/

相关文章:

c# - 如果在附加 Visual Studio 调试器的情况下启动,为什么 "ShowDialog"的异常抛出行为会有所不同?

c# - 当我尝试加载 xml 文件时,为什么出现解析 EntityName 时出错?

c# - Windows 窗体/C# 中的动态折叠面板创建

c# - 无法从代码更改 SiteCore 8.0(更新 3)中的 mvc 布局

c# - 在运行时以静态方法获取当前类?

c# - MVVM View 模型事件(命令?)

c# - C# 桌面应用程序中 Windows 窗体上的菜单

c# - 如何找到圆的重叠部分

winforms - F# 使用 Winforms DataVisualization 制作条形图

c# - 服务器通过 jquery 发出警报响应