none
Какое событие срабатывает при изменении значения numericUpDown1 по нажатию по клавишу. RRS feed

  • Вопрос

  • Какое событие срабатывает при изменении значения numericUpDown1 по нажатию по клавишу.

    Следующий код не работает если изменить значение по нажатию по клавишу:

            private void numericUpDown1_ValueChanged(object sender, EventArgs e)
            {
                MessageBox.Show("Hello");
            }
    Событие KeyPress и KeyDown не подошли так как они срабатывают до того пока значение измениться.

    1 августа 2012 г. 5:32

Ответы

  • Событие KeyPress и KeyDown не подошли так как они срабатывают до того пока значение измениться.

    А событие KeyUp вы пробовали? Вот такой код работает так как вы хотите:

    private void NumericUpDown1_KeyUp(System.Object sender, System.Windows.Forms.KeyEventArgs e)
    {
    	this.Text = NumericUpDown1.Value;
    }

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Ziya Ceferov 2 августа 2012 г. 8:08
    1 августа 2012 г. 8:20
    Отвечающий

Все ответы

  • Событие ValueChenged сработает после нажатия на клавишу Enter или потери фокуса. Это модель работы элемента.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    1 августа 2012 г. 6:25
    Отвечающий
  • Событие ValueChenged сработает после нажатия на клавишу Enter или потери фокуса. Это модель работы элемента.
    А как сделать чтобы срабатывала сразу?
    1 августа 2012 г. 6:37
  • а там есть событие TextChanged или что-то вроде того?

    если да, можно его обработать,
    правда тогда Value может наверное и не измениться (не знаю), пока не применится по ентеру или выходу,
    (предположим, что потому и не срабатывает событие).

    1 августа 2012 г. 6:55
  • Там нет TextChanged, но я могу использовать для этого класс Timer, но лучше я буду пользоваться классом TextBox.
    1 августа 2012 г. 7:01
  • Там нет TextChanged, но я могу использовать для этого класс Timer, но лучше я буду пользоваться классом TextBox.
    А зачем вам понадобилось получать значение именно в момент ввода? Ведь стандартный функционал не спроста был так сделан, в этом есть логика. Например если я хочу где то рядом отобразить результат ввода в NumericUpDown, то вводя число 1562 я буду видеть поочередно "1", "15", "156" и потом уже "1562", что и нежно было мне изначально.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    1 августа 2012 г. 7:09
    Отвечающий
  • А зачем вам понадобилось получать значение именно в момент ввода?

    В моём проекте значение должно увеличиваться нажатием клавиш стрелок, я уже использую класс TextBox.
    1 августа 2012 г. 7:48
  • А зачем вам понадобилось получать значение именно в момент ввода?

    В моём проекте значение должно увеличиваться нажатием клавиш стрелок, я уже использую класс TextBox.

    Старайтесь изначально правильно формулировать вопрос. Ничего сложно сделать так, что бы NumericUpDown увеличивал/уменьшал значения по клавишам стрелок:

    private void NumericUpDown1_KeyUp(System.Object sender, System.Windows.Forms.KeyEventArgs e)
    {
    	if (e.KeyCode == Keys.Up & NumericUpDown1.Value < NumericUpDown1.Maximum) {
    		NumericUpDown1.Value += 1;
    	}
    	if (e.KeyCode == Keys.Down & NumericUpDown1.Value > NumericUpDown1.Minimum) {
    		NumericUpDown1.Value -= 1;
    	}
    }

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    1 августа 2012 г. 7:56
    Отвечающий
  • Спасибо за ответ, но если поточнее главная проблема в том чтобы когда пользователь вводил значение клавишами, то переменные должны равняться этому значению Value сразу после нажатия клавиши.
    1 августа 2012 г. 8:08
  • Событие KeyPress и KeyDown не подошли так как они срабатывают до того пока значение измениться.

    А событие KeyUp вы пробовали? Вот такой код работает так как вы хотите:

    private void NumericUpDown1_KeyUp(System.Object sender, System.Windows.Forms.KeyEventArgs e)
    {
    	this.Text = NumericUpDown1.Value;
    }

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Ziya Ceferov 2 августа 2012 г. 8:08
    1 августа 2012 г. 8:20
    Отвечающий