आकार बदलने वर्तमान में मैं मैं क्या सोचा एक सरल काम होगा करने के लिए कोशिश कर रहा हूँ कलाकृतियों देता है। (कृपया पल के लिए उपेक्षा है कि मैं BackgroundImage
property इस्तेमाल कर सकते हैं) इस तरह दिखता आकर्षित करने के लिएएक पैनल नियंत्रण पर एक छवि आकर्षित जब
छवि:
अर्थात एक पिक्सेल ब्लू फ्रेम के साथ एक पीला बॉक्स।
आकर्षित करने के लिए, मैं Panel
नियंत्रण से Paint
घटना का उपयोग कर रहा:
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Resources.MyImage, panel1.ClientRectangle);
}
यह जब शुरू में प्रपत्र प्रदर्शित ठीक लग रहा है:
जब प्रपत्र का आकार बदलने (और डॉक पैनल भी), यह छोटे होने पर किनारों को काटता है ...
... या यह कलाकृतियों ले जाती है, जब बड़े प्रयास किए जा:
मैं बहुत यकीन है कि वहाँ नहीं बल्कि सरल और सीधी-सपाट, लेकिन मैं वास्तव में नहीं समझ सकता कुछ चल रहा है कर रहा हूँ कारण।
चूंकि मैं ClipRectangle
को अनदेखा कर रहा हूं और हमेशा सब कुछ खींचता हूं, मैंने सोचा कि छवि हर समय स्केल की जाएगी।
मेरे प्रश्न हैं:
- कलाकृतियों के लिए क्या कारण है? (I प्यार इसे समझने के लिए!)
- कलाकृतियों से छुटकारा पाने के लिए मुझे क्या करना है? (प्रत्येक आकार पर
Invalidate
बुला बगल में)
अद्यतन, समाधान:Ryan's answer को
धन्यवाद, मैं एक स्वीकार्य समाधान खोजने के लिए सक्षम था। असल में मैंने Panel
से एक कक्षा प्राप्त की, OnPaintBackground
का ओवरराइड किया और आधार विधि को कॉल किया। पिछले है, मैं अपने व्युत्पन्न पैनल के निर्माता के लिए निम्न कोड कहा:
base.DoubleBuffered = true;
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
http://stackoverflow.com/questions/1970196/c-sharp-panel-backgroundimage-transparent-controls-flickering – ionden