判断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=
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)