经过大量的谷歌搜索,我无法想出任何东西......
有没有办法让一个没有旋转框的numericUpDown控件?
我需要一个只接受整数的文本框,而且numericUpDown具有我正在寻找的完美行为。但是,我需要为空间限制隐藏数字旋转框。
当我尝试执行numericUpDown.Controls [0] .Hide()或numericUpDown.Controls.RemoveAt(0)之类的操作时,旋转框会消失,但会留下旋转框曾经存在的无法使用的空白。因此,数字在那一点滚动,意味着空间被浪费了。
还有其他解决办法吗?
谢谢..
答案 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
)。