0

我正在尝试创建用于我的 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 的宽度,这不是指定的。谁能解释一下不起作用的代码有什么问题?谢谢你。显然,我对钢笔有一些不理解的地方。

4

3 回答 3

0

行为不端的原因是在线

  System.Drawing.Pen bPen = aPen; 

这段代码不会创建一个新 Pen实例,而是声明一个现有实例aPen 的新引用,从那时起就有一个 Pen 类的实例两个对它的引用:aPenbPen.

PS PenIDisposable所以不要忘记处理它以防止资源泄漏(在您的情况下为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
   ...
 }
于 2014-03-13T06:47:52.987 回答
0

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

Pen2.Color = Pen1.Color;
于 2014-03-13T06:37:14.120 回答
0

aPen并且bPen只是同一事物的别名。Pen 是一种引用类型,当你等同时,它只是为同一个实例创建一个新名称。

于 2014-03-13T06:24:21.100 回答