【发布时间】: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