2015-01-12 14 views
7

एक मानक System.Windows.Forms.FormLinearGradientBrush प्रदर्शित नहीं होता है सही ढंग से

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); 
    } 
} 

से निम्नलिखित कोड पर विचार करें यह इस परिणाम पैदा करता है:

enter image description here

क्यों लाल और नीले रंग लाइनों गलत क्रम में दिख रहे हैं , और यह कैसे तय किया जा सकता है?

उत्तर

2

प्रतिपादन मूल समस्या है। आप Pen के लिए पूछ रहे हैं जो 8px चौड़ा है, और 8px को आपके आयत द्वारा परिभाषित रेखा से दोनों दिशाओं में बाहरी 4px के रूप में परिभाषित किया गया है। यह Alignment=Center के डिफ़ॉल्ट मान के कारण है। यदि आप Alignment=Inset का उपयोग करने के लिए Pen सेट करते हैं, तो आपके पास बेहतर परिणाम होंगे।

आप बस अपनी मूल कोड को यह जोड़कर इस लाइन देख सकते हैं:

e.Graphics.DrawRectangle(Pens.White, test); 

अपने विधि बदलें इस होना करने के लिए, और यह काम करेगा:

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); 
    } 
} 
संबंधित मुद्दे