3

フォームのコントロールにキーを送信しようとしています。しかし、NullReferenceExceptionが発生し、その理由がわかりません。コードはそれが得るのとほぼ同じくらい基本的です:

Private Sub Button19_Click(sender As System.Object, e As System.EventArgs) Handles Button19.Click
    DateTimePicker2.Focus() 'commenting out this line has no effect
    SendKeys.Send("{F4}") 'error thrown on this line
End Sub

object reference not set to an instance of an object報告されたエラーはSend共有メソッドであるため、インスタンスは必要ありません。

不思議なことに、エラーを無視すると正常に動作し、F4がコントロールに渡されます。sendkeysとUACに問題があったことは知っていますが、これは解決されたと思いました(4.0フレームワークを使用しています)

4

1 に答える 1

6

その呼び出しは例外をスローしていません。例外はSendKeys.LoadSendMethodFromConfig()でスローされ、内部で処理されます(したがって、その呼び出しの周りにtry / catchを配置すると、ユーザーコードで実際に例外がキャッチされないことがわかります) 。

発生した場所や処理されたかどうかに関係なく、スローされた例外で例外が中断するように設定されているため、デバッガーに表示されます。

[ツール]>[オプション]>[デバッグ]に移動し、[自分のコードだけを有効にする]の横のチェックボックスをオンにすることをお勧めします。

例外をスローするメソッドは次のようになります。意図的にすべての例外を飲み込んでいることに注意してください。

    private static void LoadSendMethodFromConfig()
    { 
        if (!sendMethod.HasValue) 
        {
            sendMethod = SendMethodTypes.Default; 

            try
            {
                // read SendKeys value from config file, not case sensitive 
                string value = System.Configuration.ConfigurationManager.AppSettings.Get("SendKeys");

                if (value.Equals("JournalHook", StringComparison.OrdinalIgnoreCase)) 
                    sendMethod = SendMethodTypes.JournalHook;
                else if (value.Equals("SendInput", StringComparison.OrdinalIgnoreCase)) 
                    sendMethod = SendMethodTypes.SendInput;
            }
            catch {} // ignore any exceptions to keep existing SendKeys behavior
        } 
    }
于 2012-05-09T13:50:08.320 に答える