WINDOWS开发,输入框TEXTBOX怎么来设置只可以输入价格实数

解决方案 »

  1.   

    to 就是只能让它输入 数字,不能输入字符,英文等等,怎么设置才能实现用keypress以及textchanged这两个事件进行处理。
      

  2.   

    自己判断一下吧....
    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    private bool IsNum()
    {
    string str = this.textBox1.Text.Trim();
    bool bl = true;
    for(int i = 0 ; i < str.Length ; i++)
    {
    if(Char.IsNumber(str,i) == false)
    {
    bl = false;
    break;
    }
    }
    return bl;
    }
      

  3.   

    怎么还要写代码来实现,在PB中,只要设置相应的属性,就可以实现了啊,这里怎么这么复杂,PB里面只要设置控件的输入格式就可以了啊? 请帮忙解释一下啊
      

  4.   

    在keypress事件中加入对输入文字的判断
      

  5.   

    你可以自己写个这样的控件呀,当然你也可以用别的公司提供的editmask的组件也能够实现
     /// <summary>
        /// 只可以输入数字的文本框
        /// </summary>
        [ToolboxItem(false)]
        public class InterTextBox : TextBox
        {
            #region 构造子        /// <summary>
            /// 数字文本框的构造子
            /// </summary>
            public InterTextBox()
    {
    base.WordWrap = false;
    this.Multiline = false;
            }        #endregion        #region 基本方法        /// <summary>
            /// 键盘按下事件
            /// </summary>
            /// <param name="e">键盘参数</param>
            protected override void OnKeyPress(KeyPressEventArgs e)
    {
    if (e.KeyChar == '\r')
    {
    e.Handled = true;
    base.Parent.Focus();
    }
    base.OnKeyPress(e);
    }
            /// <summary>
            /// 处理键盘消息
            /// </summary>
            /// <param name="m"></param>
            protected override void WndProc(ref System.Windows.Forms.Message m)
            {
                int WM_CHAR = 0x0102;
                int WM_PASTE = 0x0302;
                if (m.Msg == WM_CHAR)
                {
                    if (((char)m.WParam >= '0') && ((char)m.WParam <= '9') || (int)m.WParam == (int)Keys.Back || (int)m.WParam == (int)Keys.Delete || (Control.ModifierKeys & Keys.Control) == Keys.Control)
                    {
                        //整数形的时候不能输入.字符
                        if ((int)m.WParam != 46) //"."字符
                        {
                            base.WndProc(ref m);
                        }
                    }
                    if ((int)m.WParam == 45)//"-"字符
                    {
                        if (this.Text.IndexOf("-", 0) == -1 && this.SelectionStart == 0)
                        {
                            base.WndProc(ref m);
                        }
                    }
                }
                else if (m.Msg == WM_PASTE)
                {
                    string strResult = this.Text;                //Clipboard
                    IDataObject iData = Clipboard.GetDataObject();                if (iData.GetDataPresent(DataFormats.Text))
                    {
                        strResult = strResult.Insert(this.SelectionStart, (String)iData.GetData(DataFormats.Text));
                    }
                    else
                    {
                        return;
                    }
                    try
                    {
                        System.Convert.ToDouble(strResult);
                        base.WndProc(ref m);
                    }
                    catch
                    {
                    }
                }
                else
                {
                    base.WndProc(ref m);
                }
            }
            #endregion
        }
      

  6.   

    注意!这位兄弟回答的方法有问题的: 回复人:skyline81() ( 一级(初级)) 信誉:100  2006-06-13 08:48:00  得分:0

    自己判断一下吧....
    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    private bool IsNum()
    {
    string str = this.textBox1.Text.Trim();
    bool bl = true;
    for(int i = 0 ; i < str.Length ; i++)
    {
    if(Char.IsNumber(str,i) == false)
    {
    bl = false;
    break;
    }
    }
    return bl;
    }/*=====================================================
    正确的方法应该是:
    ====================================================*/
            #region 判断是否为数值
            /// <summary>
            /// 判断是否为数值类型
            /// </summary>
            public bool IsNumeric(string strNumber)
            {
                bool blCheck = true;
                if (strNumber.Trim().Length >= 1)
                {
                    for (int intIndex = 0; intIndex < strNumber.Length; intIndex++)
                    {
                        if (strNumber[intIndex] < 48 || strNumber[intIndex] > 57)
                        {
                            blCheck = false;
                            break;
                        }                }
                }
                else
                {
                    blCheck = false;
                }            return (blCheck);        }
            #endregion
      

  7.   


    因为没输入东西肯定会跳过
    for(int i = 0 ; i < str.Length ; i++)
    返回true
      

  8.   

    在textbox的keypress事件中
    if(!char.IsNumber(e.KeyChar))
    {
      if(e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 46)
        e.Handled =true;
      else if(e.KeyChar == 46)
     {
        if(txtCommodityPrice.Text.IndexOf('.') != -1)
        {
           e.Handled =true;
        }
        else if(textBox1.Text.Trim() == string.Empty)
        {
           e.Handled =true;
           textBox1.Text = "0.0";
        }
      }

    }
      

  9.   

    char[] number=new char(10){'0','1','2','3','4','5','6','7','8','9'};
                       
                    strng check=textbox1.text.trim(number);
                    if(check= ="")
                        {
                            MessageBox.Show("為數字型");
                        }
                       Else
                        {
                        Messagebox.show("為字符串");
                        }
      

  10.   

    楼上的,你的代码出现这样的错误D:\rule\dl_rule\dl_rule\Form1.cs(339): 找不到类型或命名空间名称“txtCommodityPrice”(是否缺少 using 指令或程序集引用?)
      

  11.   

    txtCommodityPrice是textBox控件名称,改成你的控件名就行了
      

  12.   

    string str = "998.98".
    char [] cs = str.ToCharArray();
    就可以得到了
      

  13.   

    用 COCO_2084(求知者)的办法,问题解决
    if(!char.IsNumber(e.KeyChar))
    {
    if(e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 46)
    e.Handled =true;
    else if(e.KeyChar == 46)
    {
    if(textBox1.Text.IndexOf('.') != -1)
    {
    e.Handled =true;
    }
    else if(textBox1.Text.Trim() == string.Empty)
    {
    e.Handled =true;
    textBox1.Text = "0.0";
    }
    }

    }谢谢
      

  14.   

    我写哪个方法也不对,CoCo_2084的方法也不对,呵呵:
    如果你输入了: 1..56 或输入 1.23.23 还会对吗?
    因为输入了两次小数点!!!
    if(!char.IsNumber(e.KeyChar))
    {
    if(e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 46)
    e.Handled =true;
    else if(e.KeyChar == 46)
    {
    if(txtCommodityPrice.Text.IndexOf('.') != -1)
    {
    e.Handled =true;
    }
    else if(textBox1.Text.Trim() == string.Empty)
    {
    e.Handled =true;
    textBox1.Text = "0.0";
    }
    }}