解决方案 »

  1.   

    Regex regex = new Regex("[^\u4e00-\u9fa5]");
    return !regex.IsMatch(input);
      

  2.   

    你不如在text_changed里做判断,等变了之后再看里面有什么
    当然如果还想禁止输入,可以先将判断通过的内容保存到string,判断里面有非法字符的时候,用保存的string重新给文本框赋值
    当然还要重新给定光标的位置
      

  3.   

    KeyPress事件本来就是在文字已经键入之后才判断的,而且只判断键盘
    如果是用鼠标复制粘贴上去,你这个事件根本不执行
      

  4.   

    建议在lostFocus 事件中判断。
      

  5.   

    OnBlur 失去焦点触发这个事件
    这样可以杜绝CTRL+V复制过来的不符合要求的内容
      

  6.   

    我现在也是在纠结到底是用KeyPress事件还是text_changed事件?
    我又试了下用TextChanged事件写,可是因为取不到KeyChar只能分辨汉字规则,无法输入退格和删除键怎么办?用keypress事件吧,加上if (IsChineseCh(textBox1.Text) == false)就没法判断了,刚输一个拼音字母就弹出msg,这可怎么办求修改?(只输入汉字和退格和删除,输错时显示个msg“输入汉字”点击确定,向前删除一个字符(取消内容))
    我改后的源码:
    public static bool IsChineseCh(string input)   //正则表达式 汉字规则
            {
                Regex regex = new Regex("^[\u4e00-\u9fa5]+$");
                return regex.IsMatch(input);
            }private void textBox1_TextChanged(object sender, EventArgs e)
            {
                //此为只能输入汉字
                if (IsChineseCh(textBox1.Text) == false)    //此为退格键可以输入
                {
                    MessageBox.Show("你输入的不是汉字");
                }
            }
      

  7.   

    重写TextBox控件
    怎么重写求思路?假如些什么?求想法
      

  8.   

    这应该怎么写?有点晕看我这样些对不,不对的话麻烦修改下呗@於黾 private void textBox1_TextChanged(object sender, EventArgs e)
            {
             //定义临时存储记录文本变量
             string temp;
             temp = textBox1.Text;
            for (int i = textBox1.SelectionStart;i<=textBox1.text.Length ;i++ )           //定义i为起始位置,寻找字符始终位置
            if (IsChineseCh(textBox1.Text) == false)                  
            /先弹出MSG提示
           MessageBox.Show("你输入的不是汉字");
           //然后去掉最后一个字符,设置SelectionStart属性让textbox获得焦点
            string strNew = this.textBox1.Text.Substring(0, this.textBox1.Text.Length - 1);
           this.textBox1.Text = strNew;
          this.textBox1.SelectionStart = this.textBox1.Text.Length;
          this.textBox1.Focus();
          }
      

  9.   

    重写TextBox控件
    怎么重写求思路?假如些什么?求想法
    调试失败,程序是可以运行,但不管输什么都弹出MSG,得点2、3次才能取消,而且接着程序卡死退出调试。这咋办?
      

  10.   

    string temp;
    要定义成全局变量啊,不要放到函数里去定义
    你这样定义,每次执行函数,它都重新变成null了而且你要先比较,再赋值啊,不要每次上来就把文本框的值赋值给它了
      

  11.   

    重写TextBox控件
    http://www.cnblogs.com/xiaofengfeng/p/3488574.html