只允许文本框中的数字不起作用? C#

时间:2013-01-14 01:06:09

标签: c# textbox

我对我正在进行的小型练习计划有疑问。我几乎没有使用C#的经验,也没有使用Visual Basic的一点经验。我遇到的问题只与文本框中的数字有关。我成功地在另一个程序中这样做了,但由于某种原因它不能使用相对相同的代码。 这是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            Double TextBoxValue;
            TextBoxValue = Convert.ToDouble(txtMinutes.Text);
            TextBoxValue = Double.Parse(txtMinutes.Text);

            {
                Double Answer;
                if (TextBoxValue > 59.99)
                {
                    Answer = TextBoxValue / 60;
                }
                else
                {
                    Answer = 0;
                }
                {
                    lblAnswer.Text = Answer.ToString();
                }
            }

        }

        private void txtHours_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsNumber (e.KeyChar) && Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }
    }
} 

如果我的代码中有其他错误,此处的任何人都可以纠正我,那也是值得赞赏的。提前谢谢。

3 个答案:

答案 0 :(得分:4)

你的支票倒了。你的代码所做的是取消输入,如果新字符是一个数字,如果它是一个控制字符。

if (!char.IsNumber(e.KeyChar) && !Char.IsControl(e.KeyChar))
    e.Handled = true;

答案 1 :(得分:1)

你的逻辑错误。它声明“如果按下的键是一个数字和一个控制字符..那么我已经处理了它”。你想要的是“如果按下的键是一个数字,我已经处理了它。”

if (!char.IsNumber(e.KeyChar)) {
    // ...

答案 2 :(得分:1)

        private void txtHours_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)
                && !char.IsDigit(e.KeyChar)
                && e.KeyChar != '.')
                e.Handled = true;

            // only allow one decimal point
            if (e.KeyChar == '.'
                && (txtHours).Text.IndexOf('.') > -1)
                e.Handled = true;
        }