分配笔没有像预期的那样工作
本文关键字:工作 分配 | 更新日期: 2023-09-27 17:49:46
我正在尝试创建笔在我的windows窗体中使用,我有代码正常工作的问题。这些笔没有按规定涂漆。有问题的代码片段如下:
如果我创建如下的笔
System.Drawing.Pen aPen = new Pen(Color.Firebrick, 5);
aPen.DashStyle = DashStyle.Solid;
System.Drawing.Pen bPen = new Pen(Color.Firebrick, 1);
bPen.DashStyle = DashStyle.Dot;
一切正常。但是,如果我创建如下的笔
System.Drawing.Pen aPen = new Pen(Color.Firebrick, 5);
aPen.DashStyle = DashStyle.Solid;
System.Drawing.Pen bPen = aPen;
bPen.DashStyle = DashStyle.Dot;
bPen.Width = 1;
我最终与两笔具有相同的颜色,Firebrick,但两者都有点破折号样式,两者都是1px的宽度,这不是什么指定。谁能解释什么是错误的代码不工作?谢谢你!
错误行为的原因在这一行
System.Drawing.Pen bPen = aPen;
这段代码没有创建一个新的 Pen
实例,而是声明了一个新的引用到现有的一个aPen,因为有一个Pen类的实例和两个引用: aPen
和bPen
。
注:笔是IDisposable
,所以不要忘记处置它,以防止资源泄漏 (hPen在您的情况下):
using (System.Drawing.Pen aPen = new Pen(Color.Firebrick, 5)) {
aPen.DashStyle = DashStyle.Solid;
// Paint with aPen here
...
}
using (System.Drawing.Pen bPen = new Pen(Color.Firebrick, 1)) {
bPen.DashStyle = DashStyle.Dot;
// Paint with bPen here
...
}
aPen
和bPen
只是同一事物的别名。Pen是一个引用类型,当你相等时,它只是为同一个实例创建一个新名称。
既然你已经有了答案,那就太好了。但仅供参考,如果你想要相同的颜色之前的笔,那么你可以写以下代码:
Pen2.Color = Pen1.Color;