संपादित संस्करण:
तुम क्या करने की कोशिश कर रहा है की बहुत assumpition के बिना:
private void panel1_Click(object sender, EventArgs e) {
using (Graphics g = this.panel1.CreateGraphics()) {
Pen pen = new Pen(Color.Black, 2);
Brush brush = new SolidBrush(this.panel1.BackgroundColor);
g.DrawRectangle(pen, 100,100, 100, 200);
pen.Dispose();
}
}
आपका कोड काम नहीं करता क्योंकि यह विंडो (आय) पर आयताकार खींच रहा है और खींचा आयताकार तब आपके पैनल द्वारा छुपाया जाता है।
आम तौर पर
ओवरराइडिंग इस तरह के एक साधारण मामले के लिए पेंट सिर्फ एक पैनल पर एक आयत खींचने के लिए बहुत अधिक प्रयास है। हालांकि, आयत को इस तरह से चित्रित करते हुए काम करता है, लेकिन आयत को फिर से खींचा जाने पर आयताकार अपरिवर्तित हो जाएगा (उदाहरण के लिए कम से कम फॉर्म को फिर से दिखाकर और बाद में फॉर्म दिखा रहा है। अगर आयताकार लगातार रहना है तो आपको पेंट विधि का उपयोग करना होगा और इसके लिए आपको क्लिक करें (उदाहरण के लिए) क्लिक ईवेंट में आयताकार बनाना होगा और फिर इसे पेंट इवेंट में खींचें। (रॉयबिव इस तरह के दृष्टिकोण के लिए समाधान देखें)।नोट: यदि आप पेंट विधि के साथ जाते हैं, तो आपको इसे यथासंभव कुशल रखना चाहिए, क्योंकि पेंट विधि को अक्सर वरी कहा जाता है।
संपादित 2
अपने आयत एक ही स्थान पर हमेशा तैयार किया जाएगा के रूप में आप पृष्ठभूमि स्पष्ट करने की जरूरत नहीं है। आदेश बिंदु है जहां उपयोगकर्ता cliced पर आयत बनाने के लिए में आप घटना माउस नीचे, जैसे करने के लिए कोड बढ़ना चाहिए (यह एक धारणा यह है कि क्या आप चाहते हैं है): को बदलने के लिए
private void panel1_MouseDown(object sender, MouseEventArgs e) {
using (Graphics g = this.panel1.CreateGraphics()) {
Pen pen = new Pen(Color.Black, 2);
Brush brush = new SolidBrush(this.panel1.BackColor);
g.FillRectangle(brush, this.panel1.Bounds); // redraws background
g.DrawRectangle(pen, e.X, e.Y, 20, 20);
pen.Dispose();
brush.Dispose();
}
}
कोशिश " this.CreateGraphics(); " "this.panel1.CreateGraphics();" – Nagg
@Nagg - आपका समाधान गलत है क्योंकि जब फॉर्म को चित्रित किया गया है तो आयत खो जाएगा। –