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