强制NumericUpDown控件只接受2的幂

本文关键字:的幂 NumericUpDown 控件 强制 | 更新日期: 2023-09-27 18:02:35

我给用户一个NumericUpDown控件,这样他就可以指定纹理的大小。重要的是,这个纹理是两个大小的幂(32,64,128…)。

我试图强迫控件只显示这个2的幂,每当您在事件valuechange中单击向上或向下按钮(或按箭头键)而没有运气时。我也尝试过使用增量属性。我自己遇到的所有解决方案要么太粗糙,要么有显示无效值的特殊情况。

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

强制NumericUpDown控件只接受2的幂

您应该继承UpDownBase

您将遇到2+位数的问题。如果我想输入32,而你在输入的时候看到了3,那么你的程序就会告诉我我错了。在提交数据时验证它

我的建议是使用ComboBox,您将有您的数字下拉,您支持自动完成,同时逃避用户输入的验证,代码如下:

//generate your array.
List<string> twos = new List<string>();
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的幂的表单。