找人写一段小程序。
虽然csdn上有许多关于textbox只能输入数字的帖子,但是还没有找到符合要求的代码。希望能完成这样一种功能:
WinForm, C#  .net2.0
1.  除了数字0~9、小数点、正负号、delete键盘都不能输入;
2.  如果输入的数字是大于0或者小于-20的,则弹出对话框 
          MessageBox.Show("Please Enter a number between -20 and 0");
3.  如果textbox中什么都没有(null状态)用户就将光标点到其他的地方同样弹出上述对话框。

第一个要求已经达到了,采用的是
 private void Textbox0_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) && (e.KeyChar != 45))
                e.Handled = true;
            base.OnKeyPress(e); //         if ((Convert.ToDouble(Textbox0.Text)) > 0)
 //            MessageBox.Show("Please Enter a number between -20 and 0"); 
        }同时我想用  private void Textbox0_TextChanged(object sender, EventArgs e)
       {
            if ((Convert.ToDouble(Textbox0.Text)) > 0)
               MessageBox.Show("Please Enter a number between -20 and 0"); 
            if ((Convert.ToDouble(Textbox0.Text)) <-20)
               MessageBox.Show("Please Enter a number between -20 and 0"); 
       }但是程序不认负号,每次输入“-”的时候就会跳出说输入的string不符合要求。

解决方案 »

  1.   

    考一段给你 if (ItemInfo.Signed == "TRUE") //可以输入负数
                {
                    if (((e.KeyChar == '-') ^ (char.IsDigit(e.KeyChar))) == false)
                    {
                        if (char.IsControl(e.KeyChar) == false)
                        {
                            e.Handled = true;
                        }
                    }
                }            if (ItemInfo.Type.Contains("d"))
                {
                    if (char.IsDigit(e.KeyChar) == false)
                    {
                        if (char.IsControl(e.KeyChar) == false)
                        {
                            e.Handled = true;
                        }
                    }
                }
                if (ItemInfo.Type.Contains("f"))
                {
                    if (((e.KeyChar == '.') ^ (char.IsDigit(e.KeyChar))) == false)
                    {
                        if (char.IsControl(e.KeyChar) == false)
                        {
                            e.Handled = true;
                        }
                    }                if (txt.Text.Contains("."))
                    {
                        if (!char.IsDigit(e.KeyChar))
                        {
                            if (char.IsControl(e.KeyChar) == false)
                            {
                                e.Handled = true;
                            }
                        }
                    }                if (txt.Text.StartsWith("."))
                    {
                        if (char.IsControl(e.KeyChar) == false)
                        {
                            e.Handled = true;
                        }
                    }                string[] Temps = ItemInfo.Type.Split('.');
                    if (Temps.Length == 2 && txt.Text.Split('.').Length == 2)
                    {
                        if (!string.IsNullOrEmpty(Temps[1]) && !string.IsNullOrEmpty(txt.Text.Split('.')[1]))
                        {
                            if (Temps[1].Length == txt.Text.Split('.')[1].Length)
                            {
                                if (char.IsControl(e.KeyChar) == false)
                                {
                                    e.Handled = true;
                                }
                            }
                        }
                    }            }
      

  2.   

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (this.textBox1.Text == "-" || this.textBox1.Text=="+")
                    return;
                try
                {
                    double i = Double.Parse(this.textBox1.Text);
                    if (i > 0.0 || i < -20.0)
                        MessageBox.Show("Error");
                }
                catch (FormatException fe)
                {
                    MessageBox.Show(fe.ToString());
                }
            }
            private void textBox1_Leave(object sender, EventArgs e)
            {
                if(string.IsNullOrEmpty(this.textBox1.Text))
                    MessageBox.Show("Error");
            }
      

  3.   

    2.  如果输入的数字是大于0或者小于-20的,则弹出对话框 
              MessageBox.Show("Please Enter a number between -20 and 0"); 比如我输入-198, 是当刚按下8时就Message,还是当点击其他地方时才报错?要是我复制->粘贴过来一个文本呢?
      

  4.   

    用验证事件  记得判断验证不通过时 写上e.cancel=true;
    别用TextboxChange事件
    其他不变
      

  5.   

    订阅Validating事件!
    可以实现你第三个要求吧!private void textBox1_Validating(object sender, CancelEventArgs e)
            {
                TextBox tb = (TextBox)sender;            if (tb.Text == "")
                    MessageBox.Show("Nothing");
            }
      

  6.   

    private void textBox1_Validating(object sender, CancelEventArgs e)
            {
                TextBox tb = (TextBox)sender;            if (tb.Text == "" 
                    || Convert.ToInt32(tb.Text)>0|| 
                    Convert.ToInt32(tb.Text) <-20)
                    MessageBox.Show("Please Enter a number between -20 and 0");
            }
    在失去焦点的时候 检查你的第2 3项要求
      

  7.   

    http://blog.csdn.net/csharp_start/archive/2008/01/25/2064642.aspx
      

  8.   


    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) && (e.KeyChar != 45))
                {
                    e.Handled = true;
                }
                
            }        private void textBox1_Validating(object sender, CancelEventArgs e)
            {
                TextBox tb = (TextBox)sender;            if (tb.Text == "" || Convert.ToInt32(tb.Text) > 0 || Convert.ToInt32(tb.Text) < -20)
                {
                    MessageBox.Show("Please Enter a number between -20 and 0");
                }        }        private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    TextBox tb = (TextBox)sender;
                    if (Convert.ToDouble(tb.Text) > 0 || Convert.ToDouble(tb.Text) < -20)
                    {
                        MessageBox.Show("Please Enter a number between -20 and 0");
                    }
                }
            }可以满足你的要求吧,如果有button,要写button的click事件处理程序!
      

  9.   

    if (Regex.Match(this.PutNumber.Text.Trim(), @"^\d+$").Success)//判断是否数字;
    {
      if(-20<Convert.Toint32(PutNumber.Text.Trim())<0)  
    {}  
    else
    {
    MessageBox.Show("Please Enter a number between -20 and 0");}    
    }
      

  10.   

    在textbox后面放置一个验证控件,规则用正则表达式来写
    至于判断数字的大小的话,可以在textbox失去焦点的时候进行判断