【发布时间】:2012-03-07 02:20:34
【问题描述】:
我开发了一个在触摸屏计算机上使用的 Windows 窗体应用程序。当用户单击输入框(文本框)时是否可以显示键盘?我该怎么做?
【问题讨论】:
标签: c# winforms keyboard touchscreen
我开发了一个在触摸屏计算机上使用的 Windows 窗体应用程序。当用户单击输入框(文本框)时是否可以显示键盘?我该怎么做?
【问题讨论】:
标签: c# winforms keyboard touchscreen
您知道 Windows 有屏幕键盘吗?
在 Windows 7 中,它是所有程序 > 附件 > 轻松访问 > 屏幕键盘。
如果你愿意,你可以自己写,但是当我不想拿起键盘时,我一直使用 Windows。
您可以创建一个快捷方式:
位置是%windir%\system32\osk.exe
所以要启动它,在 TextBox_Click 事件(或任何你想触发的事件)中
// 应该可以,我没有测试过。 System.Diagnostics.Process.Start("c:\Windows\System32\osk.exe");
只是一个更新:在我的工作机器上,我尝试运行该代码时出错(我将其构建为测试),我不得不将 osk.exe 复制到另一个目录,然后启动它,它就可以工作了。
/// <summary>
/// Test to show launching on screen board (osk.exe).
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBox1_Click(object sender, EventArgs e)
{
try
{
Process.Start(@"c:\Temp\OSK.exe");
}
catch (Exception error)
{
string err = error.ToString();
}
}
这段代码有效。
【讨论】:
您的示例为我显示 错误:
“无法启动屏幕键盘”
我发现这段代码运行良好,没有任何错误:
static void StartOSK()
{
string windir = Environment.GetEnvironmentVariable("WINDIR");
string osk = null;
if (osk == null)
{
osk = Path.Combine(Path.Combine(windir, "sysnative"), "osk.exe");
if (!File.Exists(osk))
osk = null;
}
if (osk == null)
{
osk = Path.Combine(Path.Combine(windir, "system32"), "osk.exe");
if (!File.Exists(osk))
{
osk = null;
}
}
if (osk == null)
osk = "osk.exe";
Process.Start(osk);
}
【讨论】:
我认为您必须创建一个新表单来创建键盘并在文本框单击中启动此表单
【讨论】:
我认为你可以使用。 System.Diagnostics.process.start
System.Diagnostics.Process.Start("osk.exe");
【讨论】: