0

我在 VB.Net 中有一个调用表单按钮的方法:

Private Sub BUTTON_CAL( _
    ByVal frm As Object, ByVal e As System.Windows.Forms.KeyEventArgs)

    If e.KeyCode = Keys.A AndAlso e.Modifiers = Keys.Control Then
        If frm.AddButton.Enabled = True Then Call frm.AddButton.PerformClick()
        e.SuppressKeyPress = True
    End if
End Sub

我已将此代码转换为 c#

public static void BUTTON_CAL(object frm, System.Windows.Forms.KeyEventArgs e) {
    if(e.KeyCode==Keys.A&&e.Modifiers==Keys.Control) {
        if(frm.AddButton.Enabled==true) {
            frm.AddButton.PerformClick();
        }
        e.SuppressKeyPress=true;
    }
}

在 C#.Net 中我收到错误

'object' 不包含 AddButton' 的定义,并且找不到接受第一个类型为 'object' 的参数的扩展方法 'AddButton'(您是否缺少 using 指令或程序集引用?)

4

4 回答 4

5

将“frm”转换为您期望的数据类型(运行时检查是否有效是个好主意)

Form form = frm as Form;

if( null == form )
    // error

form.AddButton(...);
于 2013-03-28T08:03:54.037 回答
0
public static void BUTTON_CAL(object sender, KeyEventArgs e) {
    if(sender is Form) {
        var frm=sender as Form;

        if(e.KeyCode==Keys.A && e.Modifiers==Keys.Control) {
            if(frm.AddButton.Enabled)
                frm.AddButton.PerformClick();

            e.SuppressKeyPress=true;
        }
    }
}
  1. 的签名KeyEventHandler

    public delegate void KeyEventHandler(object sender, KeyEventArgs e);
    
  2. if(SomeBool)不是if(SomeBool==true). 不要不必要地复杂。

  3. someObject as SomeType一个if(someObject is SomeType)就安全了。它似乎有点多余,但比 null 更具可读性。

于 2013-03-28T08:25:18.847 回答
-1

感谢大家花时间解决问题我已经通过使用以下方法解决了问题:

public static void BUTTON_CAL(object sender, System.Windows.Forms.KeyEventArgs e) 
{
     var frm = sender as Form;

     if(e.KeyCode==Keys.A&&e.Modifiers==Keys.Control) 
     {  
          if(frm.Controls["AddButton"].Enabled==true)
          {
             ((Button)frm.Controls["AddButton"]).PerformClick();
          }
          e.SuppressKeyPress=true;
     }
}
于 2013-04-05T05:26:06.600 回答
-2

将 frm 转换为表单的类名

if (((Form1)frm).AddButton.Enabled == true){
   ((Form1)frm).AddButton.PerformClick();
}

我假设 Form1 是您的表单的名称,它有一个名为 AddButton 的按钮,并且该按钮具有适当的访问修饰符。

于 2013-03-28T08:05:13.310 回答