2012-05-09 26 views
3

フォームのコントロールにキーを送信しようとしています。しかし、私はNullReferenceExceptionを取得していると私は理由を知らない。コードはそれを取得と同じくらい基本的なものです:SendKeys.Send 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フレームワークを使用しています)

+0

送信キーの受信側でエラーが発生する可能性はありますか。つまり、あなたの宛先コントロールにF4キーを処理するコードがありますか? – Steve

+0

いいえ私は、DatTimePickerはカレンダーのピッカーを示すためにF4キーを処理する必要はありません[この件に関するこの回答](http://stackoverflow.com/questions/5597880/vb-net-programmably-drop-down -the-datetimepicker/5598216#5598216) –

+0

"私が間違ってエラーを無視すると、それはうまくいきます" - Visual Studioでエラーが発生していますか?最初の例外の通知を有効にしましたか? – hvd

答えて

6

その呼び出しは例外をスローしません。内部的に(もしあなたがその呼び出しの周りに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 
     } 
    } 
+0

を使用する必要があります –

関連する問題