2012-05-09 80 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

是否有可能錯誤源於sendkey的接收端?我的意思是,你的目標控件中是否有處理F4鍵的代碼? – Steve

+0

不,我不應該DatTimePicker應該處理F4鍵來顯示日曆選取器拉[這個問題的答案](http://stackoverflow.com/questions/5597880/vb-net-programmably-drop-down -the-datetimepicker/5598216#5598216) –

+0

「奇怪的是,如果我忽略它的工作正常的錯誤」 - 你只是在Visual Studio中出現錯誤?您是否啓用了第一次機會異常通知? – hvd

回答

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 
     } 
    } 
+0

感謝您的澄清 –