2012-07-08 71 views
2

我做了一个自定义按钮,其中有一个名为Data的字段。在点击事件中识别发件人按钮控件

我在运行时以编程方式将此按钮添加到我的winform,并添加我也为它们定义了一个单击事件。那么,其实我只有一种方法,我订购了新添加的按钮到这个方法。

但在单击事件我要访问此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! 
    } 

UPDATE:

我很抱歉,我认为“不编译”.Data不显示在intelisense中......

+0

您不必检查是否sender''是'Button' ,因为'as'关键字确保你的变量是'null',如果它不能将你的变量转换为正确的类。 – Styxxy 2012-07-08 22:04:40

+4

这是无效的C#代码,所以当然不起作用。通常,自定义按钮控件应该重写OnClick方法,以便它可以实现自己的自定义点击事件行为。 – 2012-07-08 22:07:39

+0

您是如何尝试访问“数据”字段的? – 2012-07-08 22:08:46

回答

5

您需要转换为具有数据字段的自定义类的类型。

喜欢的东西:

YourCustomButton button = sender as YourCustomButton; 
+3

aaaaaaah我好蠢! – 2012-07-08 22:05:47

+0

@ Sean87这个答案解决了无法访问数据字段的问题,但更好的长期方法是遵循Hans的评论并重写OnClick,或者可能引入自定义事件以使事物触摸更安全 - 您目前依赖于布线customhandler(这只是一个标准处理程序签名)到右侧按钮。通过自定义事件,您可以确保接线是正确的。 – 2012-07-08 22:13:39

+1

+1更快:D – GETah 2012-07-08 22:14:51

3

假设您的自定义按钮类型是CustomButton,你应该这样做,而不是:

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