C# 只有在控件移动到直线上时,才会绘制该直线
我有一组自定义控件和一个几何对象列表,需要在同一个控制柄上绘制 我覆盖C# 只有在控件移动到直线上时,才会绘制该直线,c#,.net,C#,.net,我有一组自定义控件和一个几何对象列表,需要在同一个控制柄上绘制 我覆盖OnPaint过程,将base.OnPaint(e)放在第一行,并开始绘制几何对象(通过e.Graphics.DrawLine等)。 这些都在一个锁定列表中,并在一段时间后衰减。 自定义控件也可以在窗口中移动 现在,除了这个有趣的事实外,这几乎是按预期工作: 只有在控件沿其布局移动/在其布局上方移动后,才会出现 我能够在一个小环境中重现这一点: 我尝试刷新图形对象;保存/恢复;更换剪辑。 似乎什么都没用 我猜只有当控件存在时,
OnPaint
过程,将base.OnPaint(e)
放在第一行,并开始绘制几何对象(通过e.Graphics.DrawLine
等)。
这些都在一个锁定列表中,并在一段时间后衰减。
自定义控件也可以在窗口中移动
现在,除了这个有趣的事实外,这几乎是按预期工作:
只有在控件沿其布局移动/在其布局上方移动后,才会出现
我能够在一个小环境中重现这一点:
我尝试刷新图形对象;保存/恢复;更换剪辑。
似乎什么都没用
我猜只有当控件存在时,区域才会失效并重新绘制。但是我怎样才能强制绘制它们呢?将告诉框架需要重新绘制控件。例如,当鼠标遮挡了控件的一部分后,它会自动重新绘制控件,但它只会重新绘制鼠标覆盖的一小部分(因此,您最终会使用鼠标重新绘制)同样,移动一个窗口会迫使它重新绘制,就像用另一个窗口覆盖它,然后再次移动那个窗口一样
但是,如果您正在进行一系列自定义绘制,您需要让它知道需要自己调用
Invalidate
来重新绘制控件。您可能正在寻找或取决于您是Winforms还是WPF。哦。现在我觉得XD很愚蠢。我想control.Invalidate
只会触发控件重新绘制所以我甚至没有考虑过。好吧,这就是诀窍。