C# WinForms вы можете получить текстовую область NumericUpDown

Можно ли получить текстовую область элемента управления NumericUpDown? Я рассчитываю получить его размер, чтобы я мог замаскировать его панелью. Я не хочу, чтобы пользователь мог редактировать И выделять текст. Это возможно? Или есть другой способ скрыть текст в текстовом поле?

Благодарю.

4 ответа

Решение

Вы можете получить это, используя элемент управления 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,

updown.ReadOnly = true;

Если вы тоже хотите запретить выбор (интересно, зачем вам это нужно), вы можете использовать рефлексию. Я не думаю, что есть лучший способ, потому что поле upDownEdit это внутреннее поле UpDownBase,

FieldInfo editProp = updown.GetType().GetField("upDownEdit", BindingFlags.Instance | BindingFlags.NonPublic);
TextBox edit = (TextBox)editProp.GetValue(updown);
edit.Enabled = false;

Установите для свойства ReadOnly значение true, вот и все.

"Правильный" способ сделать это - создать элемент управления Up-Down и метку (метка не может быть выбрана или отредактирована). Однако авторы Windows Forms в своей бесконечной мудрости решили, что нам не нужен элемент управления Up-Down, и поэтому они не предоставили.NET-оболочку для него. Они решили, что единственная причина, по которой мы можем захотеть использовать элемент управления "вверх-вниз", - в сочетании с элементом управления 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/

Другие вопросы по тегам