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 でエラーが発生しています

「オブジェクト」には AddButton の定義が含まれておらず、タイプ「オブジェクト」の最初の引数を受け入れる拡張メソッド「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 SomeTypeif(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 に答える