是否可以获取 NumericUpDown 控件的文本区域?我正在寻找它的大小,以便我可以用面板掩盖它。我不希望用户能够编辑和选择文本。这可能吗?还是有另一种方法可以掩盖文本框中的文字?
谢谢。
是否可以获取 NumericUpDown 控件的文本区域?我正在寻找它的大小,以便我可以用面板掩盖它。我不希望用户能够编辑和选择文本。这可能吗?还是有另一种方法可以掩盖文本框中的文字?
谢谢。
如果要禁止手动编辑,只需将ReadOnly
属性设置为true
.
updown.ReadOnly = true;
如果你也想禁止选择(我想知道你为什么需要这个),你可以使用反射。我认为没有更好的方法,因为该字段upDownEdit
是UpDownBase
.
FieldInfo editProp = updown.GetType().GetField("upDownEdit", BindingFlags.Instance | BindingFlags.NonPublic);
TextBox edit = (TextBox)editProp.GetValue(updown);
edit.Enabled = false;
您可以通过使用 Label 控件而不是内置的 TextBox 控件来实现这一点。向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。
using System;
using System.Windows.Forms;
class UpDownLabel : NumericUpDown {
private Label mLabel;
private TextBox mBox;
public UpDownLabel() {
mBox = this.Controls[1] as TextBox;
mBox.Enabled = false;
mLabel = new Label();
mLabel.Location = mBox.Location;
mLabel.Size = mBox.Size;
this.Controls.Add(mLabel);
mLabel.BringToFront();
}
protected override void UpdateEditText() {
base.UpdateEditText();
if (mLabel != null) mLabel.Text = mBox.Text;
}
}
将 ReadOnly 属性设置为 true,仅此而已。
执行此操作的“正确”方法是创建一个上下控件和一个标签(无法选择或编辑标签)。但是,Windows 窗体的作者以其无限的智慧决定我们不需要 Up-Down 控件,因此他们没有提供 .NET 包装器。他们认为,我们想要 Up-Down 控件的唯一原因是与 TextBox 控件配对时。
如果您想走这条路,Up-Down 控件很简单,可以创建一个轻量级包装器:http: //msdn.microsoft.com/en-us/library/bb759880.aspx
编辑 1
[剪辑]
编辑 2
我在这里写了一篇博客:http: //tergiver.wordpress.com/2010/11/05/using-the-up-down-control-in-windows-forms/