我正在尝试编写一个使用嵌套控件和Control.Paint
事件处理程序来绘制自定义边框的应用程序。见下图:
请注意“关于ChocoTester”和“查看版本...”标签以及包含图标的PictureBox
如何绘制边框(也可能是背景颜色,尽管如此不是立即可见的)。我已将Control.Paint
事件处理程序添加到最外面的框 。但是,由于某种原因,子控件继承父项的Paint事件代码。在我开始研究这个项目之前,我从未见过Windows Forms这样做过。
请注意,子控件的BackColor
为Transparent
。这可能与上述症状有关,也可能没有。另请注意,父级具有自定义Paint
事件的另一个控件的任何子控件都会出现此行为,无论是标准Label
实例还是具有自定义绘图代码的面板
以下是展示此问题的示例Panel.Paint
处理程序:
Rectangle r = e.ClipRectangle; r.Inflate(-1, -1);
e.Graphics.FillRectangle(Brushes.AliceBlue, r);
e.Graphics.DrawRectangle(Pens.DarkBlue, r);
答案 0 :(得分:0)
我实际上已经解决了这个问题。问题是我使用PaintEventArgs.ClipRectangle
来确定绘图的大小。如果我使用Rectangle
和Control.Width
手动构建Control.Height
,并使用它来绘制到屏幕,则上面讨论的行为就会消失。