Страницы

Поиск по вопросам

вторник, 28 мая 2019 г.

Элемент управления типа UpDown

В WinForms есть стандартный контрол NumericUpDown

Хочется получить такой же, но без поля ввода. Т.е. по сути нужны только кнопки вверх/вниз. Понятно, что можно сляпать свой из двух кнопок и с изображением стрелок, но хотелось бы унификации со стандартным, чтобы на разных машинах или при смене настроек интерфейса пользователя мой контрол и стандартный выглядели единообразно.
Какие шаги следует предпринять для достижения нужного эффекта?


Ответ

Попробуйте унаследоваться от предка NumericUpDown: UpDownBase и лимитировать размер контрола размером области кнопок:
using System.Windows.Forms; using System.Reflection; using System.Drawing;
public class UpDownControl : UpDownBase { private readonly Control upDownButtons;
public UpDownControl() { // Достаем internal свойство UpDownButtonsInternal var prop = GetType().GetProperty("UpDownButtonsInternal", BindingFlags.NonPublic | BindingFlags.Instance); if (prop != null) upDownButtons = (Control)prop.GetValue(this, null); }
protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); int gapWidth = Width - upDownButtons.Right + 1; // Либо const int gapWidth = 2; Size = new Size(upDownButtons.Width + gapWidth, upDownButtons.Height); }
public override void DownButton() { }
public override void UpButton() { }
protected override void UpdateEditText() { } }
События нажатий на кнопки будут прилетать в методы DownButton и UpButton соответственно.

Комментариев нет:

Отправить комментарий