0

是否可以获取 NumericUpDown 控件的文本区域?我正在寻找它的大小,以便我可以用面板掩盖它。我不希望用户能够编辑和选择文本。这可能吗?还是有另一种方法可以掩盖文本框中的文字?

谢谢。

4

4 回答 4

4

如果要禁止手动编辑,只需将ReadOnly属性设置为true.

updown.ReadOnly = true;

如果你也想禁止选择(我想知道你为什么需要这个),你可以使用反射。我认为没有更好的方法,因为该字段upDownEditUpDownBase.

FieldInfo editProp = updown.GetType().GetField("upDownEdit", BindingFlags.Instance | BindingFlags.NonPublic);
TextBox edit = (TextBox)editProp.GetValue(updown);
edit.Enabled = false;
于 2010-10-30T15:15:55.740 回答
3

您可以通过使用 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;
    }
}
于 2010-10-30T16:01:40.217 回答
1

将 ReadOnly 属性设置为 true,仅此而已。

于 2010-10-30T15:15:32.397 回答
1

执行此操作的“正确”方法是创建一个上下控件和一个标签(无法选择或编辑标签)。但是,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/

于 2010-10-30T15:24:04.387 回答