在c#.net中使用对象,就像vb.net一样

Man*_*ngh 0 .net c# vb.net

我在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
Run Code Online (Sandbox Code Playgroud)

我已将此代码转换为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在C#.Net中我收到错误

'object'不包含AddButton'的定义,并且没有扩展方法'AddButton'可以找到第一个'object'类型的agument(你是否缺少using指令或汇编引用?)

Moh*_*oho 5

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

Form form = frm as Form;

if( null == form )
    // error

form.AddButton(...);
Run Code Online (Sandbox Code Playgroud)

  • 如果你要抛出一个错误,如果它是null,那么只需转换 - 这将是更简单的代码,并给出一个明确的异常.另外,没有理由在C#中使用`if(null == form)`而不是`if(form == null)`.它不像`if(form = null)`的拼写错误. (4认同)
  • 如果没有AddButton属性,则不能使用一个表单.解决方案可以在接口`IAddingButton {SomeType AddButton {get; set;}}`,继承此接口中的所有表单并转换为它`IAddingButton form = frm as IAddingButton;` (2认同)