强制NumericUpDown控件仅接受2的幂

时间:2011-07-17 03:29:37

标签: c# winforms

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

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

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

提前致谢。

4 个答案:

答案 0 :(得分:2)

您应该继承UpDownBase类。

答案 1 :(得分:1)

你将遇到2位数字的问题。如果我想放32并且您在我输入时看到3,那么您的程序会告诉我我错了。在提交数据时进行验证。

答案 2 :(得分:0)

我的建议是使用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);

答案 3 :(得分:-1)

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