C#WinForms numericUpDown控件(删除旋转框)

时间:2011-06-03 03:14:26

标签: c# winforms

经过大量的谷歌搜索,我无法想出任何东西......

有没有办法让一个没有旋转框的numericUpDown控件?

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

当我尝试执行numericUpDown.Controls [0] .Hide()或numericUpDown.Controls.RemoveAt(0)之类的操作时,旋转框会消失,但会留下旋转框曾经存在的无法使用的空白。因此,数字在那一点滚动,意味着空间被浪费了。

还有其他解决办法吗?

谢谢..

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我选择禁用箭头按钮,不像试图隐藏或移除它们那样难看。

在此样板代码之后:

internal MainWin()
{
    InitializeComponent();

,添加:

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

另外:在控件的属性中将InterceptArrowKeys设置为false,以防止箭头键(在键盘上)递增和递减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它接受并显示多个小数点,这是无稽之谈。)

整数框比接受实数的通用数字框(可选地以浮点表示法)更简单并返回实数类型(float,{{ 1}},或double)。