您的位置:程序门 -> .net技术 -> c#



请教textbox控制输入的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教textbox控制输入的问题[已结贴,结贴人:leomaya]
发表于:2007-01-16 13:20:37 楼主
在我的程序里面有这么一段:
private   void   period_tb_keypress(object   sender,   keypresseventargs   e)
                {
                        e.handled   =   (e.keychar   <   '0 '   ¦ ¦   e.keychar   >   '9 '   ¦ ¦   period_tb.text.length   >   1);
                        if   (e.keychar   ==   (char)keys.back)
                        {
                                e.handled   =   false;
                        }
                }
注:     period_tb为textbox

用来控制最多只输入2位0-9的数字,   现在我的问题是,   当这个textbox输入2位数字时,   我想双击这个textbox来选中里面的text(或者用鼠标将里面的text全选),   然后就填上另外的数字,   但此时的textbox已经被我控制不能再输入任何东西了(当然,   除了backspace),   大家有什么办法能让我在选中的情况下自由的输入其他数字呢?
发表于:2007-01-16 13:30:341楼 得分:5
你可以用正則表達式來来控制0-9的数字,這個比你的效果一樣。双击这个textbox来选中里面的text(或者用鼠标将里面的text全选),   然后就填上另外的数字,這個我也不曉得﹗抱歉﹗
          private   void   txtserialno_textchanged(object   sender,   eventargs   e)
                {
                        string   itemvalue   =   txtserialno.text.tostring();
                        if   (isnumeric(itemvalue)   ==   true)
                        {
                                ds.tables[ "dept "].rows[bs.position][ "serialno "]   =   int.parse(txtserialno.text.tostring().trim());
                        }
                        else
                        {
                                txtserialno.text   =   " ";
                        }
                }

                private   static   bool   isnumeric(string   itemvalue)
                {
                        return   (isregex( "^(-?[0-9]*[.]*[0-9]{0,3})$ ",   itemvalue));
                }

                private   static   bool   isregex(string   regexvalue,   string   itemvalue)
                {

                        try
                        {
                                regex   regex   =   new   system.text.regularexpressions.regex(regexvalue);
                                if   (regex.ismatch(itemvalue))   return   true;
                                else   return   false;
                        }
                        catch   (exception)
                        {
                                return   false;
                        }
                        finally
                        {
                        }
                }
发表于:2007-01-16 13:34:462楼 得分:15
如下就可以了:
private   void   textbox1_keypress(object   sender,   keypresseventargs   e)
{
if   (this.textbox1.selectionlength   ==   0)
{
e.handled   =   (e.keychar   <   '0 '   ¦ ¦   e.keychar   >   '9 '   ¦ ¦   textbox1.text.length   >   1);
if   (e.keychar   ==   (char)keys.back)
{
e.handled   =   false;
}
}
}
发表于:2007-01-16 13:36:563楼 得分:0
可是楼主想过没有,如果用户用粘贴的方法怎么办(比如用ctr+v,鼠标右键)
发表于:2007-01-16 13:37:024楼 得分:0
为什么不在失去焦点的事件里面写?。。

一失去焦点,判断是否 <100。。

不是就清空。。可以不?
发表于:2007-01-16 13:40:555楼 得分:0
这样最好^-^
private   void   form1_load(object   sender,   system.eventargs   e)
{
        period_tb.maxlength   =   2;
}
private   void   period_tb_keypress(object   sender,   keypresseventargs   e)
                {
                        e.handled   =   (e.keychar   <   '0 '   ¦ ¦   e.keychar   >   '9 ');
                        if   (e.keychar   ==   (char)keys.back)
                        {
                                e.handled   =   false;
                        }
                }
发表于:2007-01-16 13:49:086楼 得分:0
谢谢平民百姓,用你的方法搞定了^^
禁止粘贴可以用以下这个方法,跟前面的一起用就行了:

                public   const   int   wm_paste   =   0x0302;//粘貼消息  

                protected   override   void   wndproc(ref   message   m)
                {
                        if   (m.msg   !=   wm_paste)   base.wndproc(ref   m);
                }
发表于:2007-01-16 13:51:377楼 得分:0
to   kidnet:
用leave事件不好,leave事件是焦点离开的时候才会有效的,   但我的情况不是这样,   焦点并没有离开period_tb,   呵呵
发表于:2007-06-22 21:44:338楼 得分:0
up


快速检索

最新资讯
热门点击