Тема: [WFA] Змінити крок збільшення в numericupdown

Потрібно змінити крок збільшення в numericupdown за формулою х = х * 2 (має вийти 4, 8, 16) х = 2

Скориставшись  подією ValueChanged для відслідковування зміни значення, намагаюся це зробити так:

private void numericUpDownNumberOfVariables_ValueChanged(object sender, EventArgs e)
        {
            int exp = (decimal.ToInt32(numericUpDownNumberOfVariables.Value) - 1) * 2;
            numericUpDownNumberOfVariables.Value = exp;
        }

decimal.ToInt32(numericUpDownNumberOfVariables.Value) - 1) - отримую значення яке потрібно помножити на 2

Виникають такі запитання:
1) Обробник події (метод numericUpDownNumberOfVariables_ValueChanged) викликає подію ValueChanged що призводить до "зависання", як це виправити ?
2) Коли значення виходить за ліміти встановлені до numericupdown виникає виняток System.ArgumentOutOfRangeException, як це виправити ?

2

Re: [WFA] Змінити крок збільшення в numericupdown

Я правильно зрозумів, що вам треба не "змінити крок", а зробити, щоб натискання вгору збільшувало удвічі, а натискання вниз - зменшувало?
Я так розумію, вам треба успадкуватися від NumericUpDown і перевантажити методи DownButton та UpButton. І там вже перевіряти коректність перед зміною Value. Бо зараз у вас кнопка "вниз" не працює.

Подякували: Betterthanyou1

3

Re: [WFA] Змінити крок збільшення в numericupdown

Якесь дивне завдання. По людськи то мало би бути зроблено через властивість numericUpDownNumberOfVariables.Increment = 2M. Але якщо дуже треба через ValueChanged, то просто додайте if'и для перевірки чи не вилазить результат (окрема змінна) за межі допустимих значень, і якщо ok, тоді присвоюйте властивості Value значення результату.

4

Re: [WFA] Змінити крок збільшення в numericupdown

leofun01 написав:

Якесь дивне завдання. По людськи то мало би бути зроблено через властивість numericUpDownNumberOfVariables.Increment = 2M. Але якщо дуже треба через ValueChanged, то просто додайте if'и для перевірки чи не вилазить результат (окрема змінна) за межі допустимих значень, і якщо ok, тоді присвоюйте властивості Value значення результату.

Так ні ж, тоді одне натискання вниз скидатиме лічильник до нуля.

5

Re: [WFA] Змінити крок збільшення в numericupdown

koala Мені не важливо яким чином це зробити, але важливо щоб як результат при натисканні вгору збільшувало удвічі, а натискання вниз - зменшувало

Спробував успадкуватися від NumericUpDown, працює, але "дизайнер" показує таку помилку
(Сама програма працює, numericUpDown відображається правильно)

http://i.piccy.info/i9/d6f92f280601c2d31714d9bdac94c225/1573223157/46271/1346611/1.png

По людськи то мало би бути зроблено через властивість numericUpDownNumberOfVariables.Increment = 2M.

Наприклад як ? Якщо я задам Increment = 2, то перша дія
2 + 2 = 4 Добре
4 + 2 = 6 Не добре

6 Востаннє редагувалося koala (08.11.2019 17:41:26)

Re: [WFA] Змінити крок збільшення в numericupdown

Прогляньте можливі розв'язки тут: https://stackoverflow.com/questions/931 … s-designer
Гм. По факту ми маємо дві змінні - Value та Increment. Зміна Value викликає зайвий виклик ValueChanged.
Якщо ми збільшуємо Value, то маємо змінити Increment на Value, і тоді збільшення працюватиме як очікується:

Value Increment
1       1
2       2
4       4
...

Якщо зменшуємо, то маємо Value=0, і тоді треба поставити Value на половину Increment. Але при цьому буде викликано ValueChanged, і Increment стане Value, тобто половиною старого. Bingo!

private void numericUpDownNumberOfVariables_ValueChanged(object sender, EventArgs e)
{
    if(numericUpDownNumberOfVariables.Value>0)
        numericUpDownNumberOfVariables.Increment = numericUpDownNumberOfVariables.Value;
    else if(numericUpDownNumberOfVariables.Increment>1)
        numericUpDownNumberOfVariables.Value = numericUpDownNumberOfVariables.Increment/2;
    else
        numericUpDownNumberOfVariables.Value = 1;
}

Початкові значення, звісно, мають бути коректними (1,1) чи там (8,8).
Здається, це має спрацювати (крім випадків редагування вручну). Але краще все ж успадковуватися.

Подякували: leofun01, Betterthanyou2

7

Re: [WFA] Змінити крок збільшення в numericupdown

koala написав:
Increment//2;

В сішарпі це буде коментар а не ділення.

8

Re: [WFA] Змінити крок збільшення в numericupdown

Дякую, виправив.