Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > NumericUpDown инкремент и декримент?


Автор: myendlessness 9.7.2009, 14:38
Вопрос вроде изначально простой, но тут ответа на него не нашёл? 

Я хочу сделать так чтобы начиная с 16 число увеличивалось со степенью двойки например 16,32,64,128 и так до 2048, а потом таким же образом уменьшалось. 

Установил 
minimum 16, 
maximum 2048, 
value = 16, 
increment = 16

 дальше такой код:
Код

 private void numericUpDown3_MouseUp(object sender, MouseEventArgs e)
        {
            numericUpDown3.Increment = numericUpDown3.Value;
        }
 

вверх работает нормально, а вот вниз сразу перескакивает с 2048 на 16, а когда пытаюсь сделать метод "private void numericUpDown3_MouseDown"  и что-либо там написать, то получается так, что неважно нажимаю я вверх или вних, первым обрабатывается метод MouseDown, а уже затем MouseUp 

Ничего не могу понять! Подскажите, пожалуйста, если кто знает? 



Автор: diadiavova 9.7.2009, 15:26
Я бы использовал System.Windows.Forms.DomainUpDown

Автор: myendlessness 10.7.2009, 10:40
Попробовал и System.Windows.Forms.DomainUpDown  такая же беда, неважно нажимаю я вверх или вниз он выполняет два метода MouseDown и MouseUp ничего не могу понять, где зарыта собака, видимо что-то надо изменить в свойствах, так же не должно быть!

Автор: diadiavova 10.7.2009, 12:03
События  MouseDown и MouseUp происходят когда по контролу клацают мышкой и не имеет значения в каком месте. Первое - когда нажимаешь кнопку мыши, второе - когда её отпускаешь. Можно отследить события ValueChanged для нумерикапдауна и SelectedItemChange для доменапдауна. Только я не понял зачем. Доменапдаун решает описанную тобой проблему дез отслеживания событий, просто надо добавть в него нужный список значений. Или я не понял чего-то?

Автор: myendlessness 10.7.2009, 14:55
Я просто не работал с этими тулбоксами поэтому не знаю как сделать, вот и ищу решение. Если не трудно напиши, пожалуйста, как именно это сделать?

Автор: diadiavova 10.7.2009, 15:05
Всё сделано в дизайнере. Ни одной строчки ручного кода smile 

Автор: myendlessness 13.7.2009, 11:34
Спасибо за помощь, однако, осталось выяснить два вопроса! 

Почему увеличение  происходит когда я жму на нижнюю стрелочку, обычно везде вверх - увеличивать, вниз - уменьшать, а в примере наоборот?
 И второй вопрос, как сделать так чтобы изначально при запуске было 16, если присвоить Text=16, то это сработает один раз?

Автор: diadiavova 13.7.2009, 15:37
Цитата(myendlessness @  13.7.2009,  12:34 Найти цитируемый пост)
Почему увеличение  происходит когда я жму на нижнюю стрелочку

Там вообще не происходит никакого увеличения. Он просто выдаёт список значений, который я ввёл. Надо, чтобы выдавал их в обратном порядке - их надо ввести в обратном порядке(смотри свойства контрола в дизайнере). 

Цитата(myendlessness @  13.7.2009,  12:34 Найти цитируемый пост)
то это сработает один раз? 

А сколько надо?

Кроме того можно присвоить значение свойству SelectedIndex

Автор: myendlessness 14.7.2009, 11:42
Я хочу сделать так чтобы начиная с 16 число увеличивалось со степенью двойки например 16,32,64,128 и так до 2048, а потом таким же образом уменьшалось. 

То есть запускаем форму и в окне DomainUpDown показывает 16 дальше я могу мотать вверх или вниз, если нажимаю стрелочку вверх, то увеличивается 16, 32 и тд до 2048, но в любой момент я могу начать нажимать стрелочку вниз и оно должно уменьшать так же, то есть например остановился на 1024, а затем начал нажимать стрелочку вниз 1024,512,256 и так до 16. Надеюсь написал подробно.

Вроде и задача простая но сделать что-то не получается!

Автор: diadiavova 14.7.2009, 13:19
Ну я же пример выложил. Что с ним не так? smile 

Автор: myendlessness 14.7.2009, 14:11
 smile Такое ощущение, что мы говорим на разных языкахsmile Спасибо, что мучаетесь со мной и пытаетесь понять! В примере две проблемы (писал выше): 

1-ая 
Нажимаю на нижнюю стрелочку и начинает увеличиваться от 16 и до 2048, а логично было бы чтобы увеличивалось при нажатии на верхнюю стрелочку, а уменьшалось при нажатии на нижнюю

2-ая 
Счёт надо начинать с 16 и чтобы сразу при загрузке формы отображало 16( в окне DomainUpDown), а не что-либо ещё, можно конечно сделать Text=16, но это не решает вопроса

Автор: diadiavova 14.7.2009, 16:34
Цитата(myendlessness @  14.7.2009,  15:11 Найти цитируемый пост)
акое ощущение, что мы говорим на разных языках

Как это не странно - у меня тоже. smile

Цитата(myendlessness @  14.7.2009,  15:11 Найти цитируемый пост)
Нажимаю на нижнюю стрелочку и начинает увеличиваться от 16 и до 2048, а логично было бы чтобы увеличивалось при нажатии на верхнюю стрелочку, а уменьшалось при нажатии на нижнюю

Я ведь ответил уже на этот вопрос. Доменапдаун будет отображать то что в него заведено и в той последовательности, в которой эти значения в него добавлены. Для того, чтобы решить проблему всего-навсего надо список значений переписать в обратном порядке.


Цитата(myendlessness @  14.7.2009,  15:11 Найти цитируемый пост)
Счёт надо начинать с 16 и чтобы сразу при загрузке формы отображало 16( в окне DomainUpDown), а не что-либо ещё, можно конечно сделать Text=16, но это не решает вопроса 

Почему это не решает? smile Мне сложно давать советы учитывая, что я не понимаю, чем не подходит вполне рабочее решение.

Переделал за пару минут

Автор: myendlessness 15.7.2009, 11:11
Видимо мы всё-таки нашли общий язык smile  Спасибо за помощь это то, что мне надо. Извиняюсь если где-то тормозил! Хотел увеличить Вашу репутацию, но не даёт, кричит что нужно 100 постов smile 

 Ещё хотел уточнить один момент, какое именно свойство Вы изменили, чтобы началось с 16? там Text=domainUpDown1 а при запуске отображает 16! 

Автор: diadiavova 15.7.2009, 11:16
Цитата(myendlessness @  15.7.2009,  12:11 Найти цитируемый пост)
какое именно свойство Вы изменили, чтобы началось с 16?

SelectedIndex.
И зделал я это в коде, а именно в обработчике загрузки формы. Я писал уже об этом

Цитата(diadiavova @  13.7.2009,  16:37 Найти цитируемый пост)
Кроме того можно присвоить значение свойству SelectedIndex 


Цитата(myendlessness @  15.7.2009,  12:11 Найти цитируемый пост)
Хотел увеличить Вашу репутацию, но не даёт, кричит что нужно 100 постов

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)