分配笔不能按预期工作

时间:2014-03-13 06:14:12

标签: c# pen

我正在尝试创建用于我的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宽度,这不是指定的。任何人都可以解释有什么不起作用的代码有什么问题吗?谢谢。很明显,我对笔不了解。

3 个答案:

答案 0 :(得分:0)

aPenbPen仅仅是同名的别名。 Pen是一种引用类型,当您等同时,它只为同一个实例创建一个新名称。

答案 1 :(得分:0)

你已经得到了答案,很好。但只是仅供参考,如果您想要与之前笔相同的颜色,那么您可以编写以下代码:

Pen2.Color = Pen1.Color;

答案 2 :(得分:0)

不良行为的原因在于

  System.Drawing.Pen bPen = aPen; 

此代码不会创建新的 Pen实例,而是现有声明新的引用一个是aPen,从那时起,它的一个实例的Pen类和两个引用aPenbPen

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
   ...
 }