分配笔没有像预期的那样工作

本文关键字:工作 分配 | 更新日期: 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类的实例两个引用: aPenbPen

注:笔是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
   ...
 }

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

既然你已经有了答案,那就太好了。但仅供参考,如果你想要相同的颜色之前的笔,那么你可以写以下代码:

Pen2.Color = Pen1.Color;