C# 从非活动窗体向showDialogue窗体发送命令

C# 从非活动窗体向showDialogue窗体发送命令,c#,.net,winforms,showdialog,C#,.net,Winforms,Showdialog,我想从另一个非活动窗体发送显示对话窗体的键。请参见图片 表单a显示对话。后面是另一个表单,它有一个定制的键盘和numpad。 我只是简单地发送按键来阻止这些按钮的点击。 我怎么可能从键盘上发送按键来显示对话形式。你的要求基本上是不可能的。一旦您了解了模态对话框的工作原理(使用ShowDialog方法显示的表单是模态的),您就会明白为什么。当您希望强制用户仅与该对话框交互时,将使用模式对话框。它通过禁用应用程序中的任何其他窗口来防止它们与这些窗口交互。它们不受鼠标点击的影响,无法接收键盘输入,也

我想从另一个非活动窗体发送显示对话窗体的键。请参见图片

表单a显示对话。后面是另一个表单,它有一个定制的键盘和numpad。 我只是简单地发送按键来阻止这些按钮的点击。
我怎么可能从键盘上发送按键来显示对话形式。

你的要求基本上是不可能的。一旦您了解了模态对话框的工作原理(使用
ShowDialog
方法显示的表单是模态的),您就会明白为什么。当您希望强制用户仅与该对话框交互时,将使用模式对话框。它通过禁用应用程序中的任何其他窗口来防止它们与这些窗口交互。它们不受鼠标点击的影响,无法接收键盘输入,也无法接收焦点。当你尝试时,Windows会向你发出嘟嘟声,并闪烁模式对话框的标题栏,这是摇摇头说“不,不,不”的非微妙方式

因此,当您使用
ShowDialog
方法将“存款”窗体显示为模式对话框时,应用程序中的所有其他窗口都将被禁用。在您的特定情况下,这意味着包含屏幕键盘的窗口也被禁用,并且无法接收鼠标单击事件。这就是为什么当你试着点击它的“键”(按钮)时什么都没有发生

最简单的解决方法(如我在评论中所建议的)是使用
show
方法将“存款”表单显示为非模式对话框。与模式对话框不同,这不会禁用应用程序中的其他窗口,允许用户同时与所有窗口交互。单击另一个窗口将设置该窗口的焦点,并允许它处理输入事件。但是你说这对你来说是不可行的,因为你希望“存款”窗体禁用主窗口上的每个控件,而不是屏幕键盘上的每个控件

当然,一开始我说“不可能”是在撒谎。我的意思是,这非常棘手,需要您围绕标准的Windows交互模型工作。一些想法
关于你可能会如何进行春季活动,请记住:

  • 您可以使用所有最新版本的Windows附带的屏幕键盘实用程序。微软已经为此提供了一个程序。您不必构建和维护自己的,它已经包含了所有必要的逻辑,以防止用户单击其中一个“键”时它窃取焦点,并且由于它不是程序的一部分,因此当您使用
    ShowDialog
    方法将窗体显示为模态时,它不会被禁用。要查看它,请转到开始->运行并键入
    osk

    例如,在Windows 7中,它看起来像这样:

  • 如果您坚持使用自己定制的屏幕键盘,则必须将其显示为模态对话框的子窗口。也就是说,应用程序通常以其主窗体开始。然后,当您使用
    ShowDialog
    方法将“存款”窗体显示为模式对话框时,主窗体将被禁用。从“存款”表单中,您可以使用非模态
    show
    方法显示屏幕键盘表单。主窗体仍然处于禁用状态,因为它显示一个模式对话框(“存款”窗体)。但是“存款”表单并没有被禁用,因为它显示的是一个非模式对话框(屏幕键盘)


  • 你的要求基本上是不可能的。一旦您了解了模态对话框的工作原理(使用
    ShowDialog
    方法显示的表单是模态的),您就会明白为什么。当您希望强制用户仅与该对话框交互时,将使用模式对话框。它通过禁用应用程序中的任何其他窗口来防止它们与这些窗口交互。它们不受鼠标点击的影响,无法接收键盘输入,也无法接收焦点。当你尝试时,Windows会向你发出嘟嘟声,并闪烁模式对话框的标题栏,这是摇摇头说“不,不,不”的非微妙方式

    因此,当您使用
    ShowDialog
    方法将“存款”窗体显示为模式对话框时,应用程序中的所有其他窗口都将被禁用。在您的特定情况下,这意味着包含屏幕键盘的窗口也被禁用,并且无法接收鼠标单击事件。这就是为什么当你试着点击它的“键”(按钮)时什么都没有发生

    最简单的解决方法(如我在评论中所建议的)是使用
    show
    方法将“存款”表单显示为非模式对话框。与模式对话框不同,这不会禁用应用程序中的其他窗口,允许用户同时与所有窗口交互。单击另一个窗口将设置该窗口的焦点,并允许它处理输入事件。但是你说这对你来说是不可行的,因为你希望“存款”窗体禁用主窗口上的每个控件,而不是屏幕键盘上的每个控件

    当然,一开始我说“不可能”是在撒谎。我的意思是,这非常棘手,需要您围绕标准的Windows交互模型工作。一些想法
    关于你可能会如何进行春季活动,请记住:

  • 您可以使用所有最新版本的Windows附带的屏幕键盘实用程序。微软已经为此提供了一个程序。您不必构建和维护自己的,它已经包含了所有必要的逻辑,以防止用户单击其中一个“键”时它窃取焦点,并且由于它不是程序的一部分,因此当您使用
    ShowDialog
    方法将窗体显示为模态时,它不会被禁用。要查看它,请转到开始->运行并键入
    osk

    例如,在Windows 7中,它看起来像这样: