Назначение ручек не работает должным образом

Я пытаюсь создать ручки для использования в форме 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, но обе имеют стиль пунктирной черты, и обе имеют ширину 1 пиксель, что не соответствует указанному. Может кто-нибудь объяснить, что не так с кодом, который не работает? Спасибо. Очевидно, что я не понимаю в ручках.

3 ответа

Решение

Причина неправильного поведения в линии

  System.Drawing.Pen bPen = aPen; 

Этот код не создает новый Pen вместо этого он объявляет новую ссылку на существующую, которая является aPen, с тех пор есть один экземпляр класса Pen и две ссылки на него: aPen а также bPen,

PS Ручка есть 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 просто псевдоним для одной и той же вещи. Перо является ссылочным типом, и при выравнивании оно просто создает новое имя для того же экземпляра.

Как вы уже получили ответ, это хорошо. Но только к вашему сведению, если вы хотите, чтобы тот же цвет предыдущего пера, то вы можете написать следующий код:

Pen2.Color = Pen1.Color;
Другие вопросы по тегам