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

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

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

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

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

还有其他解决方案吗?

谢谢..

您可以从NumericUpDowninheritance。 诀窍是在创建控件时隐藏控件。

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。 是否只需输入数字即可validation是否只能输入数字? C#Numbers Only Textbox

我决定禁用箭头按钮,比试图隐藏或删除它们更难看。

紧接着这个样板代码:

 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 ;并且它接受并显示多个小数点,这是胡说八道。)

整数框比接受实数的通用数字框(可选地采用浮点表示法)更简单,并返回实数类型( floatdouble floatdecimal )。