【问题标题】:Draw line in C# sometimes has missing partsC#中的画线有时会丢失部分
【发布时间】:2013-09-08 22:06:33
【问题描述】:

我目前正在尝试使用 Graphics 类在 C# 中绘制一些线条。

我的问题是,有时(主要是在重新绘制表单大小时)缺少某些部分的线条。

这就是当时的样子:

这是我画线的代码:

Graphics g = pnlGraph.CreateGraphics();
g.Clear(pnlGraph.BackColor);
Point p1 = new Point((mainNode.Left + (mainNode.Width / 2)), (mainNode.Top + (mainNode.Height / 2)));
Point p2 = new Point((pic.Left + (pic.Width / 2)), (pic.Top + (pic.Height / 2)));
g.DrawLine(new Pen(new SolidBrush(Color.Black), 2), p1, p2);

这段代码从面板中间的 mainNode 到它周围的一些节点绘制了一些线。

我正在调用函数来绘制线条:

加载, 调整大小, 可见状态改变了

我也试过在Paint of the form 和panel 中没用。

有什么方法可以修复它或用其他方式绘制这些线条吗?

感谢您的任何回答!

【问题讨论】:

  • 您可能对 my example 使用当前相关的 .Net Windows UI 技术感兴趣。
  • 叹息,一次又一次,没有巨魔的“我不知道发生了什么,但因为我知道这是可行的,所以扔掉你所有的东西”的贡献,永远不要使用 CreateGraphics()。只有当你有能力每秒重新绘制 20 多帧时,这才有效。这样您就不会在意丢失之前的绘画输出。使用 Paint 事件进行绘制。
  • @HansPassant 很多人对我所谓的“巨魔 cmets”说 "thank you, this is awesome!",因为我让他们节省了无数小时试图从过时、完全无用的技术中破解有用的东西,我会限制自己向人们展示我的例子,让他们自己决定。
  • @HansPassant 感谢您的回答。您能否将其发布为答案,以便我将其标记为答案?

标签: c# .net graphics paint


【解决方案1】:

由于@HansPassant 的回答也造成了一些问题,我们以另一种方式解决了问题:

我们创建了一个图像并用面板大小的矩形填充它。 之后我们在图像中画线,在面板上绘制图像。

Graphics g = pnlGraph.CreateGraphics();
Image img = new Bitmap(pnlGraph.Width, pnlGraph.Height);
Graphics gi = Graphics.FromImage(img);
gi.DrawRectangle(new Pen(new SolidBrush(pnlGraph.BackColor)), new Rectangle(0, 0, pnlGraph.Width, pnlGraph.Height));
// For every line:
gi.DrawLine(new Pen(new SolidBrush(Color.Black), 2), p1, p2);
// At the end:
g.DrawImage(img, 0, 0, img.Width, img.Height);

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 2021-06-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多