C# 中的手机式键盘控件






1.63/5 (6投票s)
2005年2月19日
4分钟阅读

71948

3056
您想如何用红外遥控器输入文本?嗯,这就是解决方案……
引言
演示项目 (FileSearcher)
FileSearcher 是 MCKeyboard
的演示。启动后,您可以为搜索器定义一个根文件夹。然后,您需要使用手机控件输入搜索字符串。通过“GET IT”按钮,您可以递归搜索文件名。
源代码和编译代码
代码被编译成 .NET UserControl DLL,包含两个类……MobileKB
类和 Selector
类。
MobileKB
本身就是这个控件。除了按钮、标签和文本框,它还包含两个计时器,一个用于更新当前字符文本框 (updateTimer
),另一个用于写入当前字符 (currentChar
) 并继续下一个 (nextTimer
)。它还有一个变量来指示按钮被按下了多少次,以及我们在包含来自 keys.txt 的源字符的数组中的位置 (pressCount
)。最后,还有一个 Selector
类的实例。
Selector
是控件的一部分,它始终根据哪个按钮被按下以及按下了多少次,将正确的字符返回给 MobileKB
。例如,如果我们按下按钮“4”三次,那么我们想要得到“l”。这是通过方法 GetChar(int, int)
完成的。我们使用第一个 int
来确定哪个字符行是正确的,第二个 int
来获取该行中的正确字符。
背景
不久前,我和一位朋友不得不测试一台 Mediacenter-PC,我们发现用这样的家庭影院怪物可以做很多事情,这非常令人兴奋 =)。由于我们一分钱都没有,我们将一台电脑放在电视旁边,开始编写我们自己的 Mediacenter 软件(很快就可以在 这里 找到)。对我们来说,最大的困难之一是提供一种方法,仅使用红外遥控器就可以向软件添加文本。我们的第一个尝试是带有一个键盘图形的控件。您需要选择一个键,然后在红外遥控器上按“Enter”来设置一个字符。编写代码的工夫太大了,所以我们决定使用手机的键盘样式。这是一种更流畅的文本输入方式,因为您不必进行太多导航。该控件的设置也更快,因为通过按按钮显示的字符是在外部的文本文件中定义的,并且可以轻松设置计时器。
使用代码
控件易于设置
- 转到您想添加控件的窗体(设计器模式)。
- 右键单击“工具箱”将允许您访问“添加/删除项”选项。然后单击“浏览”按钮。
- 查找 MCKeyboard.dll 并双击它。
- 将实例添加到您的窗体。您会收到一条错误消息,末尾附带特定路径。您只需将 keys.txt 文件复制到该目录即可正常工作。
您也可以使用此方法
- 向 DLL 添加引用,并通过
using
指令集成它。然后您必须创建一个MobileKB
的实例。using SARS.MCKeyboard;
private MobileKB objMobileKB = new MobileKB();
- 根据您的需要修改它。要测试该控件,我建议使用默认设置。
updateTimer.Interval
应为 10,nextTimer
的间隔应为 1500。 - 要显示该控件,只需调用其
Show()
方法。要更新状态标签,只需调用Status(String)
方法。
请记住:您会收到一条错误消息,末尾附带特定路径。您只需将 keys.txt 文件复制到该目录即可正常工作。
关注点
我仍然遇到一些问题,或者有些代码有点“脏”。例如,当您从窗体中删除 MobileKB
的实例时,会出现一个 ObjectDisposedException
,提示无法访问已释放的文本框。好吧……我想……这是真的 =)。但我至今未能解决这个问题。另一个有点糟糕的地方是控件内的导航。我宁愿使用箭头键导航而不是 Tab 键导航。但这需要一些工作。最后一个是 keys.txt 未找到的错误消息。嗯,复制就可以解决,但我需要修复它。我确信很快就会有更新版本……在您的帮助下。
我还想说,我非常期待能收到反馈和编写更好代码的技巧。欢迎每一封邮件。
历史
自从代码进入 CodeProject 以来,我没有对代码做任何更改。但我想要修复异常问题,找到 updateTimer
的替代解决方案,并希望代码更小。很快就会听到我的消息……=)
附注:如果您有疑问,请发送电子邮件。我每天晚上在线聊天。