2015-01-12 36 views
7

standart System.Windows.Forms.FormLinearGradientBrush doğru

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    Rectangle test = new Rectangle(50, 50, 100, 100); 
    using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f)) 
    { 
     e.Graphics.DrawRectangle(new Pen(brush, 8), test); 
    } 
} 

aşağıdaki kodu düşünün kılmaz Bu sonuç üretir: enter image description here

Neden kırmızı ve mavi çizgiler yanlış sırayla görüntüleniyor ve bu nasıl düzeltilebilir?

cevap

2

Oluşturma kaynağı sorun. 8px genişliğinde bir Pen soruyorsunuz ve bu 8px, dikdörtgenin tanımladığı satırdan her iki yönde dışa doğru 4px olarak tanımlanıyor. Bunun nedeni Alignment=Center'un varsayılan değeridir. Pen'u Alignment=Inset'u kullanacak şekilde ayarlarsanız, daha iyi sonuçlara sahip olursunuz.

Siz sadece orijinal koduna bu ekleyerek bu çizgiyi görebilirsiniz

:

e.Graphics.DrawRectangle(Pens.White, test); 
bu olmak sizin yöntemini değiştirme

ve işe yarayacak:

Rectangle test = new Rectangle(50, 50, 100, 100); 
using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f)) 
{ 
    using (var pen = new Pen(brush, 8f)) 
    { 
     pen.Alignment = PenAlignment.Inset; 
     e.Graphics.DrawRectangle(pen, test); 
    } 
}