我正在开发Windows 8.1平板电脑的用户界面,该平板电脑上有完整版本的Windows。 Windows 8.1底部有一个键盘图标,它会弹出一个键盘,我想在单击一个numericUpDown框后自动触发。然后我还希望它在离开或点击框后关闭。
我基本上只是在点击它时试图集中它,但这似乎没有调出键盘。另外,请注意,我正在为函数中的一个设置其他numericUpDown
框,以便我可以在外面调用它,所以我希望这不会让人很难看到发生了什么,如果你需要请告诉我任何澄清,谢谢你的帮助。以下是我到目前为止的情况:
copiedNUD.Click += CopiedNudPass_Focus;
//copy copied nud
CopiedNudPass = copiedNUD;
...
void CopiedNudPass_Focus(object sender, EventArgs e)
{
CopiedNudPass.Focus();
}
我尝试了一下,但有些解决方案对我来说并不太清楚。我非常感谢你的帮助。谢谢。
答案 0 :(得分:2)
我明白了。这是我的代码,专门用于8或更高窗口的平板电脑:
copiedNUD.Click += CopiedNudPass_Focus;
//copy copied nud
CopiedNudPass = copiedNUD;
...
//Launch keyboard
void CopiedNudPass_Focus(object sender, EventArgs e)
{
Version win8version = new Version(6, 2, 9200, 0);
if (Environment.OSVersion.Version >= win8version)
{
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string keyboardPath = Path.Combine(progFiles, "TabTip.exe");
Process.Start(keyboardPath);
}
}
//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();
}
}
我现在唯一的问题是,当键盘关闭后,我的主窗体在后台被切断,我尝试使用Refresh()刷新它; ,但这似乎不起作用:(。
答案 1 :(得分:1)
这是一个更好的结束功能:
这是我的新密码:
//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的引用并向项目添加外部函数。这些步骤和其他代码都在我在这篇文章中链接的网址中。以下是为WindowsBase添加引用以使用System.Windows.Interop的方法;工作:
答案 2 :(得分:0)
这对我有用(在Java& eclipse RCP中)
text.addFocusListener(new FocusListener()
{
@Override
public void focusLost(FocusEvent arg0)
{
LogUtil.logInfo("Closing OSK");
try
{
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
Runtime.getRuntime().exec("cmd /c taskkill /IM tabtip.exe");
} else {
Runtime.getRuntime().exec("cmd /c taskkill /IM osk.exe");
}
}
catch (IOException e)
{
LogUtil.logError(e.toString());
}
}
@Override
public void focusGained(FocusEvent arg0)
{
try
{
String sysroot = System.getenv("SystemRoot");
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
LogUtil.logInfo("Opening TabTip");
ProcessBuilder pb = new ProcessBuilder("C:/pathtotabtip/tabtip.exe");
pb.start();
} else {
LogUtil.logInfo("Opening OSK");
ProcessBuilder pb = new ProcessBuilder(sysroot + "/system32/osk.exe");
pb.start();
}
}
catch (Exception e)
{
LogUtil.logError(e.toString());
}
}
});