Страницы

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

воскресенье, 8 марта 2020 г.

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

#c_sharp #winforms #usercontrol


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



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

Какие шаги следует предпринять для достижения нужного эффекта?
    


Ответы

Ответ 1



Попробуйте унаследоваться от предка 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 соответственно.

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

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