gpt4 book ai didi

c# - 拖出屏幕时出现图形错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:49 25 4
gpt4 key购买 nike

我编写了这段代码,它将在面板周围创建一个圆角边框。

public void DrawRoundRect(Graphics g, Pen p, float X, float Y, float width, float height, float radius)
{
GraphicsPath gp = new GraphicsPath();
//Upper-right arc:
gp.AddArc(X + width - (radius * 2), Y, radius * 2, radius * 2, 270, 90);
//Lower-right arc:
gp.AddArc(X + width - (radius * 2), Y + height - (radius * 2), radius * 2, radius * 2, 0, 90);
//Lower-left arc:
gp.AddArc(X, Y + height - (radius * 2), radius * 2, radius * 2, 90, 90);
//Upper-left arc:
gp.AddArc(X, Y, radius * 2, radius * 2, 180, 90);
gp.CloseFigure();
g.DrawPath(p, gp);
gp.Dispose();
}

private void panel_Paint(object sender, PaintEventArgs e)
{
Graphics v = e.Graphics;
DrawRoundRect(v, Pens.White, e.ClipRectangle.Left, e.ClipRectangle.Top, e.ClipRectangle.Width - 1, e.ClipRectangle.Height - 1, 10);
base.OnPaint(e);
}

它工作正常,直到它离开屏幕并发生这种情况: enter image description here

有谁知道我做错了什么,或者如何解决这个问题?

最佳答案

你误解了 ClipRectangle 的意思。

它不会告诉您面板有多大 - 它会告诉您要重绘面板的哪一部分。当您将表单移出屏幕时,它需要重新绘制更改监视器的部分 - 但不是保留在原始监视器上的部分。因此,它不会重绘整个面板(当 ClipRectangle 是面板的整个区域,并且您的代码有效时),它会告诉您只重绘其中的一部分 - 而 ClipRectangle 比您要绘制的面板小得多。

ClipRectangle 确实是一种优化功能。如果您不关心它,您几乎可以完全忽略它 - 只需使用 0, 0, panel.Width, panel.Height

关于c# - 拖出屏幕时出现图形错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com