C# 强制NumericUpDown控件仅接受二的幂

C# 强制NumericUpDown控件仅接受二的幂,c#,winforms,C#,Winforms,我为用户提供了一个NumericUpDown控件,以便用户可以指定纹理的大小。重要的是,该纹理具有两种大小(32、64、128…)的幂 我试图在ValueChanged事件中,当您单击up(向上)或down(向下)按钮(或按箭头键)时,强制控件仅显示这两个幂。我也尝试过使用Increment属性。我自己遇到的所有解决方案要么太粗糙,要么有显示无效值的特殊情况 有没有一种简单的方法(或者至少不太棘手)来实现这种行为 提前感谢。您将遇到2位以上数字的问题。如果我想输入32,而你在我输入时看到3,那么

我为用户提供了一个NumericUpDown控件,以便用户可以指定纹理的大小。重要的是,该纹理具有两种大小(32、64、128…)的幂

我试图在ValueChanged事件中,当您单击up(向上)或down(向下)按钮(或按箭头键)时,强制控件仅显示这两个幂。我也尝试过使用Increment属性。我自己遇到的所有解决方案要么太粗糙,要么有显示无效值的特殊情况

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


提前感谢。

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

嗯,你可以自己做。
使用一个文本框和两个图片框,您可以设置一个只设置二次幂的窗体。

您应该继承
UpDownBase
类。

我的建议是使用一个
组合框,您可以将数字下拉,支持自动完成,同时避免用户输入的验证,代码如下:

//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);
//生成您的数组。
List twos=新列表();
int项=2;
int max=int.MaxValue/2;
而((项目=2*项目)
不,不要那样做。做。这是我的方案B,但我更喜欢数字上下的方案。这可能有点傻,但我认为这对用户来说似乎是一个更优雅的选择。无论如何,谢谢你!我来看看上下垒。制作一个可以在整个项目中重用的自定义控件可能会很酷。我已经制作了一个自定义的poweroftwodown,效果非常好。这很容易。您只需覆盖UpButton()、DownButton()和UpdateItemText()。为了使它像标准的NumericUpDown一样,我还创建了一个自定义值,最小值和最大值。它看起来不错,做了我想要的!谢谢这不是问题,因为文本框部分是只读的。用户只能与上/下箭头交互。