WinForms: NumericUpDown (.NET CF 3.5) и действительные числа

2

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

  • 0
    Нужно добавить это как комментарий: NumericUpDown, вероятно, самый уродливый, самый грубый и самый бесполезный элемент управления в истории Windows. Ваши клиенты будут любить вас, если вы придумали любой другой способ ввода номеров. Я понимаю, что ввод цифр с помощью SIP (в режиме клавиатуры) - это боль, но если вы зададите вопрос «Какой лучший способ ввода цифр в Windows Mobile?» Я выложу самый красивый фрагмент кода C #, с которым я когда-либо сталкивался.
  • 1
    Я использовал ползунки рядом с ними на рабочем столе, чтобы сделать это проще.
Показать ещё 2 комментария
Теги:
winforms
compact-framework
numericupdown

4 ответа

2

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

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

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

  • 0
    Есть ли обходной путь или бесплатная альтернатива где-нибудь?
  • 0
    Да. Я только добавил это к своему ответу.
Показать ещё 1 комментарий
0

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

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

  • 1
    Не работает на CF.
  • 0
    Кажется, в CompactFramework нет «десятичных знаков»
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню