强制NumericUpDown控件仅接受2的幂

我向用户呈现NumericUpDown控件,以便他可以指定纹理的大小。 重要的是这种纹理具有两种尺寸(32,64,128 ……)的功率。

我试图在没有运气的情况下在ValueChanged事件中单击向上或向下按钮(或按箭头键)时强制控件只显示两个幂。 我也尝试过使用Increment属性。 我自己遇到的所有解决方案要么过于hacky,要么具有显示无效值的特殊情况。

是否有一种简单的方法(或至少不是太棘手)来实现这种行为?

提前致谢。

您应该inheritanceUpDownBase类。

你将遇到2位数的问题。 如果我想放32并且你在我打字时看到3 ,那么你的程序会告诉我我错了。 提交数据时validation它。

我的建议是使用ComboBox ,你的数字会下降,你支持自动完成,同时逃避用户输入的validation,代码如下:

 //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); 

嗯,你可以做自己的。 使用文本框和几个图片框,您可以设置一个仅设置2的幂的表单。