मेरे पास कोड है जो Winforms में एक सीमाहीन रूप के चारों ओर खींचने देता है जिसे मैं कई महीनों से उपयोग कर रहा हूं, जो बहुत अच्छी तरह से काम करता है।अमान्य बनाम अद्यतन
लेकिन जब मुझे पहली बार कोड दिया गया, तो उन्होंने फॉर्म के MouseMove
घटना में this.Invalidate();
का उपयोग किया, और फॉर्म थोड़ी फ्लिकर हो गया और चारों ओर खींचते समय धीमा हो गया। इसलिए, MouseMove
घटना में Update()
के साथ प्रतिस्थापित किया गया और, मेरे आश्चर्य के लिए, फ़ॉर्म को अब बहुत आसानी से खींचा जा सकता है और इसमें कोई फर्क नहीं पड़ता है।
क्या कोई मुझे बता सकता है कि क्यों अपडेट कोड को अमान्य से बेहतर बनाता है, भले ही अमान्य लगता है कि यह सही उपयोग करने वाला है?
धन्यवाद :)
पी.एस. अगर मैं कोड जोड़ता हूं तो शायद यह और मदद करेगा ... इसे अभी जोड़ना।
संपादित - कोड यह रहा:
private void titlebar_MouseDown(object sender, MouseEventArgs e)
{
this.IsMouseDown = true;
this.LastCursorPosition = new Point(e.X, e.Y);
if (this.BackColor == Color.White)
{
this.BackColor = Color.GhostWhite;
tbox.BackColor = Color.GhostWhite;
tbox.ForeColor = Color.Black;
}
else
{
this.BackColor = Color.FromArgb(20, 20, 20);
tbox.BackColor = Color.FromArgb(20, 20, 20);
tbox.ForeColor = Color.White;
}
}
private void titlebar_MouseMove(object sender, MouseEventArgs e)
{
if (this.IsMouseDown == true)
{
//Move the form
this.Location = new Point(this.Left - (this.LastCursorPosition.X - e.X), this.Top - (this.LastCursorPosition.Y - e.Y));
// Update works better than Invalidate();.
Update();
}
}
private void titlebar_MouseUp(object sender, MouseEventArgs e)
{
this.IsMouseDown = false;
this.BackColor = fc;
tbox.BackColor = fc;
}
धन्यवाद एक गुच्छा मार्टिन। :) –