C# WinForms 数字选择框控件(去除旋转框)

11

在大量搜索之后,我找不到任何方法...

有没有一种方法可以获得没有微调框的numericUpDown控件?

我需要一个只接受整数的文本框,而numericUpDown具有我正在寻找的完美行为。但是,由于空间限制,我需要隐藏数字微调框。

当我尝试像 numericUpDown.Controls[0].Hide() 或 numericUpDown.Controls.RemoveAt(0) 这样做时,微调框会消失,但会留下一个无法使用的空白区域。因此,在该点处滚动数字,意味着浪费了空间。

还有其他解决方案吗?

谢谢。


我在这里发布了一个快速而简单的解决方法:https://stackoverflow.com/a/77544195/22978708 - undefined
2个回答

11
您可以从 NumericUpDown 继承。诀窍是在控件创建时隐藏控件。
public class NumericUpDownWitoutButtons : NumericUpDown
{
    public NumericUpDownWitoutButtons()
    {
        Controls[0].Visible = false;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(SystemColors.Window);
        base.OnPaint(e);
    }
}

如果放置按钮的位置看起来很奇怪,还需要重写OnPaint方法。

另外,你可能不需要使用NumericUpDown控件。验证输入只包含数字是否足够?可以参考C# Numbers Only Textbox


我刚试了一下,很抱歉,它不起作用。文本框右侧有一个无法使用的空间。当文本到达以前 UpDown 按钮所在的白色空间时,文本开始滚动 :( - krebstar
嗨,感谢您的帮助。但它仍然没有解决我的问题。这是一张图片,展示了我所说的问题:http://imgur.com/EP1OD - krebstar
我真的很想使用numericUpDown控件,因为我喜欢它不能粘贴其他东西。但是如果这不起作用,我想我将不得不使用常规文本框。:S - krebstar
糟糕..看起来你无法将内容粘贴到一个numericUpDown控件中 :( - krebstar
这对我来说也很好,实际上箭头使用的空间仍然存在。希望客户会喜欢它的方式 :) - Alexa Adrian

0

我选择禁用箭头按钮,因为这比尝试隐藏或删除它们要好看一些。

在这个样板代码之后立即执行:

internal MainWin()
{
    InitializeComponent();

添加这个:

    myNumericUpDown.Controls[0].Enabled = false;  // Disable the arrow buttons.

同时:在控件的属性中设置InterceptArrowKeysfalse,以防止箭头键(键盘上的箭头键)增加和减少myNumericUpDown.Value

不好的方法:

    myNumericUpDown.Controls[0].Hide();  // Hide the arrow buttons.
    // This leaves a gray patch that turns white after minimize-and-restore.

    myNumericUpDown.Controls.RemoveAt(0);  // Remove the arrow buttons.
    // This leaves a gray patch that turns white after minimize-and-restore.

半差劲的方法:

忘记上面的内容。只需将控件的属性Increment设置为0。箭头按钮仍然可操作,键盘上的箭头键仍然会被拦截,但现在它们不会起作用。遗憾的是,无动作的按钮可能比禁用的箭头按钮更不直观。(我很惊讶它竟然接受 Increment = 0。一个智能版本的控件会在增量为0时巧妙地隐藏箭头按钮。)

其他解决方案:

可以将数字框实现为带有额外代码的TextBox,限制输入为数字,并返回或显示一个数值(decimal 或您选择的类型)。(搜索可以找到许多不同、复杂的示例。)粘贴的数据与按键方式不同,因此需要额外的代码来处理粘贴。 (优点:您可以使这个数字框比内置的 NumericUpDown 更智能:NumericUpDown愚蠢地接受和显示.,直到用户按下Enter键或离开字段,即使您指定了 DecimalPlaces = 0;而且它还接受和显示多个小数点,这是荒谬的。)

一个整数框比接受实数(可选浮点表示法)并返回实数类型(floatdoubledecimal)的通用数字框更简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接