Я создал несколько пользовательских элементов управления .NET Winform, которые наследуются от UserControl. Один из них, ArrowButton, имеет много общих свойств с другим, немного более простым, под названием CustomButton. ArrowButton - это, по сути, CustomButton, но со стрелкой, нарисованной рядом с текстом. Оба они в настоящее время добавляют общую кнопку в базу UserControl, а затем имеют функции вызова событий Paint, которые рисуют градиентный фон, настраиваемый текст и графику стрелок в случае ArrowButton. Это отлично работает.
Но потом я начал думать, что было бы целесообразно, чтобы ArrowButton использовал CustomButton вместо обычной кнопки, чтобы он получал фон и текст из этого, и все, что ArrowButton должен был бы сделать, это нарисовать на нем стрелку .
Я заменил кнопку в ArrowButton на CustomButton. Все идет нормально. Но когда он запускается, он просто выглядит как CustomButton, а часть стрелки никогда не рисуется. Насколько я могу судить, код рисования в ArrowButton не вызывается. Или, возможно, закрашивается кнопкой CustomButton.
Так можно ли сначала рисовать CustomButton, а затем ArrowButton поверх него аддитивным способом? И если это так, я должен делать это, используя
void InitializeComponent(void)
{
this->CustmBtn = (gcnew CustomButton());
....
this->CustmBtn->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &ArrowButton::ArrowBtn_Paint);
переопределить OnPaint () или использовать другой метод? Я работаю в C ++ / CLI, но примеры C #, вероятно, тоже будут работать.
Редактировать - Дополнительные детали:
Я изменил ArrowButton для наследования от CustomButton вместо UserControl. Это определенно похоже на путь, так как я могу автоматически наследовать все свойства из CustomButton, и он все еще отлично работает в конструкторе VStudio. Тем не менее, он по-прежнему отказывается рисовать стрелку. И я подтвердил (используя вызовы Console :: WriteLine ()), что и функция события Paint, и мои функции переопределения OnPaint (), где я пытаюсь сделать рисование стрелок, никогда не вызывают вообще.