我正在尝试创建用于我的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宽度,这不是指定的。任何人都可以解释有什么不起作用的代码有什么问题吗?谢谢。很明显,我对笔不了解。
答案 0 :(得分:0)
aPen
和bPen
仅仅是同名的别名。 Pen是一种引用类型,当您等同时,它只为同一个实例创建一个新名称。
答案 1 :(得分:0)
你已经得到了答案,很好。但只是仅供参考,如果您想要与之前笔相同的颜色,那么您可以编写以下代码:
Pen2.Color = Pen1.Color;
答案 2 :(得分:0)
不良行为的原因在于
System.Drawing.Pen bPen = aPen;
此代码不会创建新的 Pen
实例,而是向现有声明新的引用一个是aPen,从那时起,它的一个实例的Pen类和两个引用:aPen
和bPen
。
P.S。笔是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
...
}