控件继承父级的自定义绘图代码

时间:2016-06-26 21:28:25

标签: winforms system.drawing

我正在尝试编写一个使用嵌套控件和Control.Paint事件处理程序来绘制自定义边框的应用程序。见下图:

Drawing Glitch Example

请注意“关于ChocoTester”和“查看版本...”标签以及包含图标的PictureBox如何绘制边框(也可能是背景颜色,尽管如此不是立即可见的)。我已将Control.Paint事件处理程序添加到最外面的框 。但是,由于某种原因,子控件继承父项的Paint事件代码。在我开始研究这个项目之前,我从未见过Windows Forms这样做过。

请注意,子控件的BackColorTransparent。这可能与上述症状有关,也可能没有。另请注意,父级具有自定义Paint事件的另一个控件的任何子控件都会出现此行为,无论是标准Label实例还是具有自定义绘图代码的面板

以下是展示此问题的示例Panel.Paint处理程序:

Rectangle r = e.ClipRectangle; r.Inflate(-1, -1);
e.Graphics.FillRectangle(Brushes.AliceBlue, r);
e.Graphics.DrawRectangle(Pens.DarkBlue, r);

1 个答案:

答案 0 :(得分:0)

我实际上已经解决了这个问题。问题是我使用PaintEventArgs.ClipRectangle来确定绘图的大小。如果我使用RectangleControl.Width手动构建Control.Height,并使用它来绘制到屏幕,则上面讨论的行为就会消失。