0

在我弹出的新表单中单击 NumericUpDown 框时,我设法在 Windows 8 中显示了一个键盘。不幸的是,似乎在“失去焦点”关闭键盘后,窗口被扭曲并且在弹出窗口关闭之前不会显示整个程序。

//Close keyboard
void CopiedNudPass_LostFocus(object sender, EventArgs e)
{

    Version win8version = new Version(6, 2, 9200, 0);

    if (Environment.OSVersion.Version >= win8version)
    {
        Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
        foreach (Process onscreenProcess in oskProcessArray)
        {
            onscreenProcess.Kill();
        }
    Refresh();
    }
}

所以,基本上,当从当前打开的表单关闭键盘时,我需要刷新背景窗口。任何建议表示赞赏。谢谢你。

4

1 回答 1

0

我在这里找到了我的解决方案:

在终止 TabletKeyboard(TabTip.exe) 应用程序的进程后,不会恢复到其在 wpf 中的原始大小

这是我的新关闭代码:

//Close keyboard
void CopiedNudPass_LostFocus(object sender, EventArgs e)
{
        Version win8version = new Version(6, 2, 9200, 0);

        if (Environment.OSVersion.Version >= win8version)
        {
            uint WM_SYSCOMMAND = 274;
            uint SC_CLOSE = 61536;
            IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
            PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
        }
}

我还必须添加对 WindowsBase 的引用并向项目添加外部函数。步骤和附加代码在我在这篇文章中链接到的 url 中。以下是添加 WindowsBase 引用以使用 System.Windows.Interop 的方法;去工作:

  1. 右键单击项目
  2. 突出显示添加并单击参考
  3. 确保您在程序集下选择了框架
  4. 向下滚动并检查“WindowsBase”并点击确定
  5. 使用 System.Windows.Interop 添加;在你的代码和你完成的顶部
于 2013-12-23T20:09:10.023 回答