NumericUpDown
- это элемент управления, который наследует от композитного управления UpDownBase
. Он содержит регулятор UpDownEdit
и UpDownButtons
. UpDownEdit
является TextBox
. Вы можете изменить внешний вид элемента управления и его детей. Например, вы можете добавить Label
в элемент управления текстовым полем и прикрепить его справа от TextBox
, а затем установить текстовые поля текстового поля, отправив сообщение EM_SETMARGINS
, чтобы получить такой результат:
Код
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExNumericUpDown : NumericUpDown
{
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
private const int EM_SETMARGINS = 0xd3;
private const int EC_RIGHTMARGIN = 2;
private Label label;
public ExNumericUpDown() : base()
{
var textBox = Controls[1];
label = new Label() { Text = "MHz", Dock = DockStyle.Right, AutoSize = true };
textBox.Controls.Add(label);
}
public string Label
{
get { return label.Text; }
set { label.Text = value; if (IsHandleCreated) SetMargin(); }
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
SetMargin();
}
private void SetMargin()
{
SendMessage(Controls[1].Handle, EM_SETMARGINS, EC_RIGHTMARGIN, label.Width << 16);
}
}