在vs2010使用c#自定义一个只能输入数字的文本框?

在vs2010使用c#自定义一个只能输入数字的文本框?,第1张

1.在Winform(C#)中要实现限制Textbox只能输入数字,一般的做法就是在按键事件中处理,

判断keychar的值。限制只能输入数字小数点,Backspace,del这几个键。数字0~9所

对应的keychar为48~57,小数点是46,Backspace是8,小数点是46。

2.输入小数点。输入的小数要符合数字的格式,类似9.9.9这样的是不能够输入的。做法就是用float.TryParse来转换Textbox中之前和之后的值,然后比较两者的转换结果。在如下代码中,实现了控件textBox1中输入数字。

在控件textBox1中的KeyPress时间中输入如下代码private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

//判断按键是不是要输入的类型。

if

(((int)e.KeyChar <48 || (int)e.KeyChar >57) &&

(int)e.KeyChar != 8 &&(int)e.KeyChar !=46 )

e.Handled = true//小数点的处理。

if ((int)e.KeyChar == 46) //小数点

{

if (textBox1.Text.Length <= 0)

e.Handled = true //小数点不能在第一位

else

{

float f

float oldf

bool b1 = false, b2 = false

b1 = float.TryParse(textBox1.Text, out oldf)

b2 = float.TryParse(textBox1.Text + e.KeyChar.ToString(), out f)

if (b2 == false)

{

if (b1 == true)

e.Handled = true

else

e.Handled = false

}

}

}}

>数字输入你要d出么?如何d出?d出一个新的窗体还是直接在原来控件上出现输入装置?

>数字输入理论上如果你能响应keydown就问题不大...不响应请设置自定义控件允许焦点...还不响应就看天...

>如果输入窗口由你自己绘制的话会恶心死你 你要做的是完全模拟一个textBox的行为 如果你做过基于directX的游戏就会发现这多恶心...需要计算光标在哪 需要处理内容超出文本框的情况 需要处理一大堆IMM事件来支持输入法(只输入数字反而简单了...) 需要支持鼠标事件来选中文本和移动光标 需要支持shift+方向键的选中 ctrl+C ctrl+V的剪切板处理...总之....想做的没什么瑕疵要费一番功夫...

>其实简单的话(比如没光标...)直接响应keydown 程序里留一个stringBuilder就好了...每keydown识别一次 然后整个控件重绘 逐个字符用GDI绘制出来...

>GDI绘制文本有啥难度么=A= 当然 这还分有换行没换行的情况... 还要计算到绘制内容超出客户区的情况 所以要逐字符measure...或者设置clip然后简单的右对齐绘制 应该没什么问题 不会超出矩形外的

>总之能处理以上想到的大大小小细节就好了 绘制和事件响应我觉得没难点=A=


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11905571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存