【发布时间】:2019-03-13 15:42:01
【问题描述】:
我创建了几个继承自 UserControl 的自定义 .NET Winform 控件。其中之一是 ArrowButton,它与另一个稍微简单的称为 CustomButton 的属性共享许多属性。 ArrowButton 本质上是 CustomButton,但在文本旁边绘制了一个箭头。目前,它们都向 UserControl 基础添加了一个公共 Button,然后让 Paint 事件调用函数,在 ArrowButton 的情况下绘制渐变背景、自定义文本和箭头图形。这工作正常。
但后来我开始认为让 ArrowButton 使用 CustomButton 而不是普通按钮是有意义的,以便从中获取背景和文本,而 ArrowButton 所要做的就是在其顶部绘制箭头.
我将 ArrowButton 中的 Button 替换为 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() 覆盖函数,我试图做箭头绘制的地方根本不会被调用。
【问题讨论】:
标签: winforms