【问题标题】:Forcing a NumericUpDown control to only accept powers of two强制 NumericUpDown 控件只接受 2 的幂
【发布时间】:2011-07-17 12:15:53
【问题描述】:

我向用户展示了一个 NumericUpDown 控件,以便他可以指定纹理的大小。重要的是,此纹理具有两个大小(32、64、128...)的幂。

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

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

提前致谢。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您应该继承UpDownBase 类。

    【讨论】:

    • 我会看看 UpDownBase。制作一个我可以在整个项目中重复使用的自定义控件可能很酷。
    • 我做了一个自定义的 PowerOfTwoUpDown 效果很好。这很容易。您只需覆盖 UpButton()、DownButton() 和 UpdateEditText()。为了使它像标准 NumericUpDown 一样,我还制作了自定义值、最小值和最大值。它看起来不错,并且可以满足我的要求!谢谢!
    【解决方案2】:

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

    【讨论】:

    • 这不是问题,因为文本框部分是只读的。用户只能与向上/向下箭头交互。
    【解决方案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);
    

    【讨论】:

    • 这是我作为 B 计划的选项,但我更喜欢 NumericUpDown 替代方案。这可能很愚蠢,但我认为这对用户来说似乎是一个更优雅的选择。无论如何,谢谢!
    【解决方案4】:

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

    【讨论】:

    • 不,不要那样做。做this.
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2012-03-09
    • 2019-04-29
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多