是什么原因引起的?其他控件显示得很好......
public CustomControl()
{
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
}
customcontrol放在TableLayoutPanel中。
...................
编辑:澄清: 假设您有一个窗口大小的控件,顶部有一个小模式对话框。当您移动对话框窗口时,它就像您使用控件上的窗口绘制(边框在控件上绘制)。控件不像其他控件那样在同一表单上重新绘制,即montcalendar或其他自定义控件。我似乎无法找到原因?
绘图工件的细节:
答案 0 :(得分:2)
很难从片段中分辨出来。标准错误是通过Control.CreateGraphics()而不是OnPaint()方法绘制。无法工作,Windows让OnPaint方法在部分控件被发现时运行。这会抹去你画的任何东西。另一种失败模式是从一个控件派生而来,该控件是本机Window控件的包装器。这些类型的控件不支持UserPaint,本机Windows代码必须执行绘图。
从屏幕截图中可以清楚地看到文本是如何交错的。那是因为OnPaint()重写使用e.ClipRectangle属性来确定绘制的位置。当您在控件上缓慢拖动窗口时,该值总是会改变,它只会告诉您需要重绘控件的哪个部分。它不告诉你在哪里绘制。这必须基于控制边界,通常是从(0,0)到(ClientSize.Width,ClientSize.Height)的矩形。
仅使用e.ClipRectangle优化绘图。就像在裁剪矩形之外跳过昂贵的绘图细节一样。它本来是一个小的,Windows已经非常擅长自动裁剪。