#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 соответственно.
Комментариев нет:
Отправить комментарий