Назначение ручек не работает должным образом
Я пытаюсь создать ручки для использования в форме 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;