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 回答