Принуждение элемента управления NumericUpDown принимать только два

Я представляю пользователю элемент управления NumericUpDown, чтобы он мог указать размер текстуры. Важно, чтобы эта текстура имела мощность двух размеров (32, 64, 128 …).

Я попытался заставить элемент управления представить только эти полномочия в два раза, когда вы нажимаете кнопки вверх или вниз (или нажимаете клавиши со стрелками) в событии ValueChanged без везения. Я также попытался использовать свойство Increment. Все решения, с которыми я столкнулся сам, либо слишком хакерские, либо имеют особый случай, когда он показывает недопустимые значения.

Есть ли простой способ (или, по крайней мере, не слишком сложный) для достижения такого поведения?

Заранее спасибо.

Вы должны наследовать class UpDownBase .

Вы столкнетесь с проблемой в двухзначных числах. Если я хочу поставить 32 и вы увидите 3 когда я набираю текст, тогда ваша программа просто скажет мне, что я ошибаюсь. Подтвердите его, когда вы отправляете свои данные.

Мое предложение состоит в том, чтобы использовать ComboBox , вы потеряете свои номера, вы поддерживаете автоматическое завершение и в то же время избегаете проверки ввода пользователя, код вроде:

 //generate your array. List twos = new List(); int item = 2; int max = int.MaxValue / 2; while ((item = 2 * item) < max) { twos.Add(item.ToString()); } ComboBox comboBox1 = new ComboBox(); comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; comboBox1.FormattingEnabled = true; //comboBox1.Items.Clear(); comboBox1.Items.AddRange(twos.ToArray()); comboBox1.AutoCompleteCustomSource.AddRange(twos.ToArray()); this.Controls.Add(comboBox1); 

Хм, хорошо, что ты можешь сделать свой собственный. Используя текстовое поле и пару изображений, вы можете настроить форму, которая устанавливает только две степени.