WinForms:NumericUpDown (.NET CF 3.5) 和实数

发布于 2024-08-02 23:19:58 字数 56 浏览 10 评论 0原文

NumericUpDown 似乎只处理整数。我如何修改它(?),以便我可以使用双精度作为值和增量?

NumericUpDown seems to be only dealing with integers. How can I modify it (?), so I can use doubles as Value and Increment?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我一向站在原地 2024-08-09 23:19:58

我只使用一个文本框,然后覆盖 OnKeyPress 事件。这段代码过去对我有用,但只适用于写 1234.56 的组,而不是 1234,56。

public partial class NumberTextBox : TextBox
{
    public NumberTextBox()
    {
        InitializeComponent();
    }

    public decimal Value
    {
        get
        {
            try
            {
                return decimal.Parse(Text);
            }
            catch (Exception)
            {
                return -1;
            }
        }
    }

    public int ValueInt
    {
        get { return int.Parse(Text); }
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar)
            && !char.IsDigit(e.KeyChar)
            && e.KeyChar != '.')
        {
            e.Handled = true;
        }

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

    public void AppendString(string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            Text = string.Empty;
        }
        else
        {
            if (value == "." && Text.IndexOf('.') > -1)
                return;
            Text += value;
        }
    }
}

I just use a textbox, then override the OnKeyPress event. This code has worked for me in the past, but is only good for groups that write 1234.56, not 1234,56.

public partial class NumberTextBox : TextBox
{
    public NumberTextBox()
    {
        InitializeComponent();
    }

    public decimal Value
    {
        get
        {
            try
            {
                return decimal.Parse(Text);
            }
            catch (Exception)
            {
                return -1;
            }
        }
    }

    public int ValueInt
    {
        get { return int.Parse(Text); }
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar)
            && !char.IsDigit(e.KeyChar)
            && e.KeyChar != '.')
        {
            e.Handled = true;
        }

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

    public void AppendString(string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            Text = string.Empty;
        }
        else
        {
            if (value == "." && Text.IndexOf('.') > -1)
                return;
            Text += value;
        }
    }
}
甜点 2024-08-09 23:19:58

NumericUpDown 适用于小数类型,但仅在紧凑框架上为整数。这是 CF 类的限制。

但是,有一个 CodeProject UserControl它提供了 CF 的实现。

NumericUpDown works with decimal types, but is integer only on the compact framework. This is a limitation of the class on CF.

There is, however, a CodeProject UserControl that provides an implementation for CF.

谎言月老 2024-08-09 23:19:58

有一个名为 DecimalPlaces 的属性。
将其设置为大于 0 的值,这样您就可以使用小数

There is a property called DecimalPlaces.
Set it to something grater than 0 and it will allow you to work with decimals

凉城已无爱 2024-08-09 23:19:58

我的代码只是这里的一个块代码(使用 Compact Framework 进行测试);

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '.')
        {
            if (((TextBox)sender).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
            else if (((TextBox)sender).Text.Length == 0)
            {
                e.Handled = true;
            }
        }
        else if (!char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }

        if (e.KeyChar == '\b')  // backspace silme tuşunun çalıması için gerekli
        {
            e.Handled = false;
        }

        base.OnKeyPress(e);
    }

顺便说一句,我讨厌紧凑框架。因为实在是太有限了!但我必须:(

My code is just one block code here it is (tested with Compact Framework);

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '.')
        {
            if (((TextBox)sender).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
            else if (((TextBox)sender).Text.Length == 0)
            {
                e.Handled = true;
            }
        }
        else if (!char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }

        if (e.KeyChar == '\b')  // backspace silme tuşunun çalıması için gerekli
        {
            e.Handled = false;
        }

        base.OnKeyPress(e);
    }

by the way, I hate Compact Framework. Because it is too Limited! But I have to :(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文