欢迎光临
我们一直在努力

只能对数值操作的TextBox-.NET教程,评论及其它

建站超值云服务器,限时71元/月

当界面上要用户输入只有数字的字符时,默认的textbox是不能胜任的,网上有很多网友们提供了很多的做法,我总结了一下写了一个在c#下的实现,做到了如下的几点:

1:只能输入类似这样的字符:-123456.789;1234.789;

2:在输入的字符串中不能存在两个点符:12456.78//正确;12.456.78//不正确;

3:如果表示负数可以在字符串的最前面加一个减号“-”,也只能加到弟一个字符的位置;

4:可以用复制粘帖功能和菜单功能,但是只对能正确格式的字符串有效,比如:12.34可以,abc不可以;

5:只是得到一个字符串,还可以在这个基础上再改进自己所需的,经如添加对十六进制的支持等。

代码如下在.net下用c#写的:

using system;

using system.windows.forms;

namespace numtextbox

{

/// <summary>

/// numtextbox 的摘要说明。

/// </summary>

public class textboxnumex:system.windows.forms.textbox

{

public const int wm_contextmenu = 0x007b;//右键菜单消息

public const int wm_char = 0x0102; //输入字符消息(键盘输入的,输入法输入的好像不是这个消息)

public const int wm_cut = 0x0300; //程序发送此消息给一个编辑框或combobox来删除当前选择的文本

public const int wm_copy = 0x0301; //程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板

public const int wm_paste = 0x0302; //程序发送此消息给editcontrol或combobox从剪贴板中得到数据

public const int wm_clear = 0x0303; //程序发送此消息给editcontrol或combobox清除当前选择的内容;

public const int wm_undo = 0x0304; //程序发送此消息给editcontrol或combobox撤消最后一次操作

public textboxnumex()

{

//

// todo: 在此处添加构造函数逻辑

//

}

protected override void wndproc(ref message m)

{

switch(m.msg)

{

case wm_char:

system.console.writeline(m.wparam);

bool issign = ((int)m.wparam == 45);

bool isnum = ((int)m.wparam >= 48) && ((int)m.wparam <= 57);

bool isback = (int)m.wparam == (int)keys.back;

bool isdelete = (int)m.wparam == (int)keys.delete;//实际上这是一个"."键

bool isctr = ((int)m.wparam == 24) || ((int)m.wparam == 22) || ((int)m.wparam == 26) ||((int)m.wparam == 3);

if( isnum || isback || isctr)

{

base.wndproc (ref m);

}

if (issign)

{

if (this.selectionstart!=0)

{

break;

}

base.wndproc (ref m);

break;

}

if (isdelete)

{

if (this.text.indexof(".")<0)

{

base.wndproc (ref m);

}

}

if ((int)m.wparam == 1)

{

this.selectall();

}

break;

case wm_paste:

idataobject idata = clipboard.getdataobject();//取剪贴板对象

if(idata.getdatapresent(dataformats.text)) //判断是否是text

{

string str = (string)idata.getdata(dataformats.text);//取数据

if (matchnumber(str))

{

base.wndproc (ref m);

break;

}

}

m.result = (intptr)0;//不可以粘贴

break;

default:

base.wndproc (ref m);

break;

}

}

private bool matchnumber(string clipboardtext)

{

int index=0;

string strnum = "-0.123456789";

index = clipboardtext.indexof(strnum[0]);

if (index>=0)

{

if (index>0)

{

return false;

}

index = this.selectionstart;

if (index>0)

{

return false;

}

}

index = clipboardtext.indexof(strnum[2]);

if (index!=-1)

{

index = this.text.indexof(strnum[2]);

if (index!=-1)

{

return false;

}

}

for(int i=0; i<clipboardtext.length; i++)

{

index = strnum.indexof(clipboardtext[i]);

if (index <0)

{

return false;

}

}

return true;

}

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 只能对数值操作的TextBox-.NET教程,评论及其它
分享到: 更多 (0)

相关推荐

  • 暂无文章