WinForms: NumericUpDown (.NET CF 3.5) и действительные числа - PullRequest
2 голосов
/ 25 августа 2009

NumericUpDown, кажется, имеет дело только с целыми числами. Как я могу изменить его (?), Чтобы я мог использовать в качестве значения и приращения значения типа double?

Ответы [ 4 ]

2 голосов
/ 25 августа 2009

NumericUpDown работает с десятичными типами, но является целочисленным только в компактной структуре. Это ограничение класса по CF.

Однако существует CodeProject UserControl , который обеспечивает реализацию для CF.

2 голосов
/ 25 августа 2009

Я просто использую текстовое поле, а затем перезаписываю событие 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;
        }
    }
}
0 голосов
/ 16 октября 2015

Мой код - это всего лишь один блочный код (протестирован с 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);
    }

кстати, я ненавижу Compact Framework. Потому что это слишком ограничено! Но я должен: (

0 голосов
/ 25 августа 2009

Существует свойство с именем DecimalPlaces. Установите для него значение больше 0, и это позволит вам работать с десятичными числами

...