Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';在Windows Mobile中输入数字的最佳方式是什么?(.NET CF 3.5)_C#_.net_Compact Framework - Fatal编程技术网

C# 什么';在Windows Mobile中输入数字的最佳方式是什么?(.NET CF 3.5)

C# 什么';在Windows Mobile中输入数字的最佳方式是什么?(.NET CF 3.5),c#,.net,compact-framework,C#,.net,Compact Framework,一定有比受限数字上下控件更好的方法。可能有用。如果做不到这一点,我建议使用带有OnTextChange事件处理程序的普通文本框,该处理程序将检查以确保输入的值实际上是一个数字。任何非数字字符,您可以弹出一个消息框,或者根据需要完全删除这些字符 NumericUpDown控件有时使用起来很慢,但它们具有内在的数据验证,在某些情况下非常有用。如果控件是用户不经常使用的控件,请考虑使用它。否则,MaskedTextBox或TextBox就是最好的选择。在Windows Mobile(或常规Window

一定有比受限数字上下控件更好的方法。

可能有用。如果做不到这一点,我建议使用带有OnTextChange事件处理程序的普通文本框,该处理程序将检查以确保输入的值实际上是一个数字。任何非数字字符,您可以弹出一个消息框,或者根据需要完全删除这些字符


NumericUpDown控件有时使用起来很慢,但它们具有内在的数据验证,在某些情况下非常有用。如果控件是用户不经常使用的控件,请考虑使用它。否则,MaskedTextBox或TextBox就是最好的选择。

在Windows Mobile(或常规Windows应用程序)中输入数字(尤其是非整数)的最简单方法是,用户只需输入一个文本框,然后验证他们输入的数字是否正确

Windows Mobile中此方法的问题在于默认SIP(软输入面板,又称小弹出键盘)如下所示:

在真正的Windows Mobile设备上,SIP看起来甚至比这个还要小,正确地敲击顶部的小数字键对keister来说是一个巨大的痛苦。为此,您要使用的是数字模式,单击左上角的“123”按钮可获得该模式,如下所示:

问题是,没有(简单的)编程方式使这种SIP模式代替常规键盘出现。要使SIP以数字模式显示,请将对项目的引用添加到Microsoft.WindowsCE.Forms,然后将此代码添加为名为“SIPHandler”的类(您必须将名称空间更改为项目的名称空间):

或使其在常规键盘模式下显示:

SIPHandler.ShowSIPRegular();
要再次隐藏它:

SIPHandler.HideSIP();
此代码背后的基本技巧是对左上角的颜色进行排序,以确定SIP是否已处于常规键盘模式或数字模式,然后在同一个角落模拟鼠标单击(如果需要),以确保SIP处于所需模式

注意:这是“借用”的web代码,但我不再知道它是从哪里来的。如果有人知道这个黑客是从哪里来的,请告诉我,我很乐意把它归于原作者

更新:在谷歌搜索了2秒钟后,我发现这段代码的最接近的来源是Daniel Moth:

。。。他把原文归功于亚历克斯·芬曼:


谢谢,伙计们!这段代码曾经让我流泪(当时我正在切洋葱,但不可能是这样)。

解决这一问题的另一种方法是使用多级上下文菜单,其中第一层选项涵盖数字范围,第二层让用户选择特定值,如下所示:

您可以提前创建完整的菜单结构(有点麻烦),或者根据所需的值范围和分辨率动态加载结构。即使在Windows Mobile设备上,您也可以在不到一秒钟的时间内使用数百个菜单项完成此操作


这种方法在输入货币价值方面也非常有效。

移动平台上不存在MaskedTextBox。我也这么怀疑,因此我添加了“失败…”。在TextChange()事件中进行验证对我来说是个好主意。您可以在字符之间循环查找无效的字符位置,并突出显示其余字符。我以前试过KeyPress/KeyDown/keydup,它们都是在值更改之前启动的。在这方面根本没有用处。因此,我求助于NumUpDwn。我怎么能错过这个有用的活动…@moster67:这是我一直以来最喜欢的黑客。这是一个困扰我多年的问题,直到我找到这段代码。谢谢。如果我自己写的话,我会感到自豪的对于我目前的需求来说,这不是一个有用的解决方案,但这确实是一个非常酷和创新的解决方案!如果我能多投一次票,那就有两次了。:)
SIPHandler.ShowSIPRegular();
SIPHandler.HideSIP();