winforms 识别click事件中的发送方按钮控件

5lhxktic  于 2022-12-30  发布在  其他
关注(0)|答案(4)|浏览(148)

我创建了一个自定义按钮,其中包含一个名为Data的字段。
我在运行时通过编程的方式把这个按钮添加到我的winform中,并且在添加时我也为它们定义了一个click事件。实际上我只有一个方法,我把新添加的按钮订阅到这个方法中。
但是在click事件中,我想访问这个Data字段,并将其显示为消息框,但似乎我的类型转换不正确:

CustomButton_Click(object sender, EventArgs e)
    {
        Button button;
        if (sender is Button)
        {
            button = sender as Button;
        } 

        //How to access "Data" field in the sender button? 
        //button.Data  is not compiling!
    }

更新:
很抱歉,我用"未编译"表示.Data未显示在intelisense中...

col17t5w

col17t5w1#

您需要强制转换为具有Data字段的自定义类的类型。
例如:

YourCustomButton button = sender as YourCustomButton;
4zcjmb1e

4zcjmb1e2#

假设您的自定义按钮类型为CustomButton,则应改为执行以下操作:

CustomButton_Click(object sender, EventArgs e){
  CustomButton button = sender as CustomButton;
  if (button != null){
      // Use your button here
  } 
}
vlf7wbxs

vlf7wbxs3#

如果您不想设置变量,简单的方法是:

((CustomButton)sender).Click

或者随便你。

vjrehmav

vjrehmav4#

我在Github上的一个win forms项目中发现了一个有趣的检查任务:

private void btn_Click(object sender, EventArgs e){

 // here it checks if sender is button and make the assignment, all in one shot.
 // Bad readability, thus not recommended
 if (!(sender is Button senderButton)) 
                return;

var _text = senderButton.Text;
...

相关问题