【问题标题】:Drawing lines/rectangle in a form C# [duplicate]以C#的形式绘制线条/矩形[重复]
【发布时间】:2013-08-02 22:10:47
【问题描述】:

我有一个使用透明背景的表单,因此我可以在屏幕上显示文本而不隐藏其他应用程序。

基本上我有一个 Form 的实例,我在其中设置透明颜色等,然后​​我有一个函数 addtext("Hello World", X, Y) 在其中创建一个 Label 对象,设置设置并添加到此表单控制。

this.Controls.Add(newLabel);

好吧,现在我需要创建一些东西来添加一个 retangle 以便人们可以在屏幕上“绘制”东西,所以我需要类似于 Label 对象的东西。

我在互联网上看到了一些示例,但所有示例都需要 Paint() 事件才能使用图形等,并且添加 LAbel 并不需要这样的所有内容。

我尝试使用该事件并尝试调用 Graphic 属性等,但没有成功。

以下是我进行的一些测试:

private class Line : Control
        {
            public float FromX { get; set; }
            public float FromY { get; set; }
            public float ToX { get; set; }
            public float ToY { get; set; }
            public Pen PenColor { get; set; }

            public Line() { }
        }

Graphics g = this.CreateGraphics();
Line line = (Line)cc;
g.DrawRectangle(line.PenColor, line.FromX, line.FromY, line.ToX, line.ToY);

编辑:上面的代码在某些情况下有效,不是一直有效,如果我尝试调试代码,有时在执行 g.DrawRect~ 后它不会移动到下一行,看起来就像“永远执行” g.DrawRectangle() 函数,控制这个绘图的线程一直说“正在运行”,有人知道会发生什么吗?

【问题讨论】:

  • 你能澄清你想要做什么。在我的脑海中,您似乎正在尝试在表单或图像上绘图?
  • 只有在将Line 控件添加到表单中时,您对CreateGraphics 的使用才会起作用:myForm.Controls.Add(line); 此外,我不会直接从Control 继承。选择一个,例如private class Line : Panel。面板很好画。
  • 这是一个表格,我用我得到的新信息编辑了第一篇文章。有时它在绘制,但有时它有点卡住了。
  • 将您的 Line 实例添加到 List() 中,然后在表单的 OnPaint 覆盖中,使用覆盖提供的图形实例绘制每条线。不要使用 CreateGraphics。每当表单被刷新、被另一个表单覆盖或最小化和恢复时,您使用该方法绘制的任何内容都会消失。见此链接:bobpowell.net/creategraphics.aspx

标签: c# .net winforms


【解决方案1】:

上面的代码在某些情况下有效,而不是所有时候

它总是“有效”,只是你不完全了解自己在做什么。

如果您想在控件上绘图,那么您应该在OnPaint 处理程序(或覆盖)中进行。 Windows 由消息循环更新。当窗口收到WM_PAINT 消息时,它会根据其当前的OnPaint 实现(消息处理程序)重绘自己。

您从OnPaint 外部对其进行绘制,因此您所做的任何事情都会在下次窗口更新时被覆盖。附带说明一下,每次调用 CreateGraphics 时都会泄漏 Graphics 对象。

因此,要实现绘图表面,您需要在输入处理程序(KeyDown、MouseDown、MouseUp 等)中跟踪输入。您将此上下文信息保存为 data,然后在 OnPaint 处理程序中绘制该数据表示的内容。

您可以通过调用Invalidate() 来强制刷新控件。这将向它发送一条WM_PAINT 消息,并且您的OnPaint 处理程序将被调用。

进一步阅读:

【讨论】:

  • 谢谢,在 Paint 事件中使用上面的代码效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2018-11-26
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多