2017-06-11 5 views
0

だから、これは私のコードです:なぜペンサイズの変更はここではうまくいかないのですか?

float penSize = 1; 
     Pen p = new Pen(Color.Black, penSize); 
     e.Graphics.DrawLine(p , new Point(0 , 0) , new Point(100, 100)); 
     penSize = 5; 
     e.Graphics.DrawLine(p, new Point(0, 0), new Point(50, 150)); 
     penSize = 10; 
     e.Graphics.DrawLine(p, new Point(0, 0), new Point(30, 200)); 
     p.Dispose(); 

これは私のパネルのPaintイベント内です。 これは3行、さまざまな厚さ(1,5と10)のすべてを出力すると仮定します。

それは単に、この出力しかし:これはなぜ All lines of same thickness?

を誰も教えてもらえますか?

答えて

1

サイズごとにペンインスタンスを作成する必要があります。ペンインスタンスは浮動小数点への参照を保持しないので、penSizeを変更しても、既に作成されたPenインスタンスには影響しません。つまり、浮動小数点型は値型であり、その値はコピーされ、参照されません。コメントでkennyxyzによって示唆されているように

using(Pen p1 = new Pen(Color.Black, 1)) 
{ 
    e.Graphics.DrawLine(p1 , new Point(0 , 0) , new Point(100, 100)); 
} 
using(Pen p5 = new Pen(Color.Black, 5)) 
{ 
    e.Graphics.DrawLine(p5, new Point(0, 0), new Point(50, 150)); 
} 
using(Pen p10 = new Pen(Color.Black, 10)) 
{ 
    e.Graphics.DrawLine(p10, new Point(0, 0), new Point(30, 200)); 
} 

代替として、あなたは、単一ペンインスタンスのWidthプロパティを設定することができます。

// start with a Width of 1 
using(Pen pen = new Pen(Color.Black, 1)) 
{ 
    e.Graphics.DrawLine(pen , new Point(0 , 0) , new Point(100, 100)); 
    pen.Width = 5; 
    e.Graphics.DrawLine(pen, new Point(0, 0), new Point(50, 150)); 
    pen.Width = 10; 
    e.Graphics.DrawLine(pen, new Point(0, 0), new Point(30, 200)); 
} // Dispose is called here 

あなたの結果:

drawing

+1

それとも、このようにPenインスタンスのWidthプロパティを設定すると、サイズごとにペンインスタンスを作成する必要はありません。 – kennyzx

関連する問題