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
;并且它接受并显示多个小数点,这是胡说八道。)
整数框比接受实数的通用数字框(可选地采用浮点表示法)更简单,并返回实数类型( float
, double
float
或decimal
)。