我在textBox里要输入金额,格式是xx.xx,小数点后必须有两位,如果用户输入的不是数字,便不能显示,如果用户输入的是xx,则自动变成xx.00,如果用户输入的是xx.x则自动变马xx.x0
请指点下,谢谢了

解决方案 »

  1.   

    轉帖:
    限定文本输入为金额(money)类型 
    写了一小段程序,用来控制textbox的输入数据为money类型,也就是123.45的格式.不过还不是太完善,拿出来共同研究吧.
    不说废话了,贴代码...this.textbox1.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.textbox1_KeyPress);...privatevoidtextbox1_KeyPress(objectsender,System.Windows.Forms.KeyPressEventArgse){if((e.KeyChar<48e.KeyChar>57)&&e.KeyChar!=8&&e.KeyChar!=32&&e.KeyChar!=46){e.Handled=true;}elseif(e.KeyChar==46&&textbox1.Text.IndexOf(".")>=0){e.Handled=true;}elseif(textbox1.Text.IndexOf(".")>=0&&textbox1.Text.Length-textbox1.Text.IndexOf(".")>2){e.Handled=true;}if(e.KeyChar==13){try{decimald=decimal.Parse(textbox1.Text);if(double.Parse(d.ToString())<0.02){System.Windows.Forms.MessageBox.Show("金额太小","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);return;}//#.##不足位数的用0补位strings=d.ToString("#,##0.00");textbox1.Text=s;System.Windows.Forms.SendKeys.Send("\t");}catch(System.Exceptionex){MessageBox.Show(ex.Message);}}}其中if(e.KeyChar==46&&textbox1.Text.IndexOf(".")>=0){e.Handled=true;}用于判断用户输入两次以上的"."的情况,if(textbox1.Text.IndexOf(".")>=0&&textbox1.Text.Length-textbox1.Text.IndexOf(".")>2){e.Handled=true;}用于当用户输入到分以后禁止继续输入的情况在if(e.KeyChar==13)用户输入回车提交以后先判断了一次输入金额的大小decimald=decimal.Parse(textbox1.Text);if(double.Parse(d.ToString())<0.02)然后回显到textbox上strings=d.ToString("#,##0.00");textbox1.Text=s;这些判断里,对小数点的判断写的不是太好.当用户输入到分的时候,连删除按钮也不能用了.不知哪位看到这段代码来完善一下,呵呵~~
      

  2.   

    文章出處:http://jiaocheng.ssxin.com/text_2E/TView_2E26D0B33FC896CF.html
      

  3.   

    楼上正解代码没仔细看,在输入中只需判断是否是0-9或小数点;对于格式的整理可以放到验证(Validate)事件中去处理,分以后如果还有就进行四舍五入。
      

  4.   

    但是这个代码有一个问题,一旦用户输完之后再回来想修改的话,BackSpace键就不起作用了.不知道为什么?期待更完美的解答,谢谢了
      

  5.   

    因为
    elseif(textbox1.Text.IndexOf(".")>=0&&textbox1.Text.Length-textbox1.Text.IndexOf(".")>2)
    {
    e.Handled=true;
    }把这一判断删去,将格式的整理放到验证(Validate)事件中去处理
      

  6.   

    private void textBox1_KeyPress (object sender, KeyPressEventArgs e)
        {
          if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != 46)
          {
            e.Handled = true;
          }
          else if (e.KeyChar == 46 && textBox1.Text.IndexOf(".") >= 0)
          {
            e.Handled = true;
          }
          else if (e.KeyChar==13)
          {
            textBox1_Validating(sender, new CancelEventArgs());
          }
        }    private void textBox1_Validating (object sender, CancelEventArgs e)
        {
          if (textBox1.Text.IndexOf(".") == -1)
          {
            textBox1.Text = textBox1.Text + ".00";
            return;
          }
          else if (textBox1.Text.IndexOf(".") == 0)
          {
            textBox1.Text = "0" + textBox1.Text;
          }
          else
          {
            int i = textBox1.Text.IndexOf(".") + 3;
            textBox1.Text = textBox1.Text.Substring(0, i < textBox1.Text.Length ? i : textBox1.Text.Length);
          }
          int clen = textBox1.Text.Length;
          for (int i = 0; i < 3 - (clen - textBox1.Text.IndexOf(".")); i++)
          {
            textBox1.Text = textBox1.Text + "0";
          }
        }