65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的手机式键盘控件

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.63/5 (6投票s)

2005年2月19日

4分钟阅读

viewsIcon

71948

downloadIcon

3056

您想如何用红外遥控器输入文本?嗯,这就是解决方案……

Sample image

引言

演示项目 (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 的替代解决方案,并希望代码更小。很快就会听到我的消息……=)

附注:如果您有疑问,请发送电子邮件。我每天晚上在线聊天。

© . All rights reserved.