2010-04-28 15 views

उत्तर

-1

picturebox एक नियंत्रण है और स्रोत के रूप में एक छवि है - तो आप इसे

MyImage = new Bitmap(fileToDisplay); 
pictureBox1.ClientSize = new Size(xSize, ySize); 
pictureBox1.Image = MyImage; 
+0

यह एक बिटमैप__ को __in खींचता है, चित्रबॉक्स__ को __onto नहीं। यह काम करता है लेकिन यह पूरी तरह से अलग है! – TaW

2

सबसे अच्छा तरीका एक चित्र बॉक्स में एक सर्कल और रेखा खींचना नहीं है! यह उस उद्देश्य के लिए तैयार नहीं है।

बॉब पावेल के GDI + ब्लॉग से:

इस समस्या की जड़ है कि खिड़कियों के मौलिक नियमों प्रोग्रामिंग टूट गया है। और तस्वीर बॉक्स के परिणामस्वरूप कुछ ऐसी चीज के लिए दोषी ठहराया गया है जो वास्तव में इसकी गलती नहीं है। की व्याख्या करने में सहायता के लिए, नीचे दिए गए चार बिंदु इस मामले में क्या गलत हो गए हैं।

  • चित्र बॉक्स नियंत्रण छवियों को प्रदर्शित करने के लिए है। यह एक ग्राफिक्स सतह के लिए एक आसान प्लेसहोल्डर नहीं है।

  • विंडोज एक घटना संचालित प्रणाली है जिसमें प्रत्येक घटना को सही संदर्भ में सर्विस किया जाना चाहिए और बटन क्लिक या माउस मूव ईवेंट को संभालने के लिए निर्धारित घटनाओं का उपयोग स्क्रीन या अन्य अजीब सामान पर ड्राइंग करने के लिए नहीं किया जाना चाहिए।

  • पिक्चरबॉक्स स्वयं को सिस्टम खींचकर रीफ्रेश करता है। ड्रॉइंग। इमेज आधारित ऑब्जेक्ट इसकी छवि प्रॉपर्टी में संग्रहीत है। अगर कोई छवि नहीं है, तो यह पृष्ठभूमि रंग दिखाएगी।

  • किसी भी नियंत्रण के ग्राफिक्स ऑब्जेक्ट पर चोरी और ड्राइंग अच्छा अभ्यास नहीं है, दृढ़ता से निराश होना चाहिए और सही समय पर सही जगह पर ईवेंट को संभालने के नियमों को तोड़ना चाहिए। असल में यदि आप ऐसा करते हैं तो इससे आपको दर्द होगा। जब आप दीवार के खिलाफ अपने सिर को धक्का देते हैं तो इससे आपको दर्द होता है। यह एक संकेत है कि आपको इसे करना बंद कर देना चाहिए। यह पिक्चरबॉक्स के लिए भी है। क्रेतेग्राफिक्स कॉल।

इसे करने का सही तरीका।

घटना संचालित प्रणाली के नियमों के बाद आसान है लेकिन थोड़ा पूर्व विचार की आवश्यकता है। इसलिए, यदि आप ग्राफिक्स के कुछ छोटे से खींचना चाहते हैं और जब यह एक विंडो आगे बढ़ता है तो और फिर जब आप कम और पुनर्स्थापित करते हैं, तो आपको सेवा करना होगा जो भी ऑब्जेक्ट है कि आप पेंट करना चाहते हैं। पिक्चरबॉक्स में इसके साथ बैगेज है जो इस तरह के एप्लिकेशन के लिए अनावश्यक है। यदि आप सिर्फ स्थान पर कुछ आकर्षित करना चाहते हैं, तो फ़ॉर्म.पेंट ईवेंट का जवाब देकर इसे फ़ॉर्म पर खींचें। यदि आप एक ग्राफ़िक के लिए एक आसान प्लेसहोल्डर चाहते हैं जो सेट सीमाओं के भीतर काम करता है, तो पैनल नियंत्रण और सेवा का उपयोग करें, यह पेंट इवेंट है। यदि आप अपनी कॉर्पोरेट छवि के लिए ग्राफ़िक ओवर-ओवर डुप्लिकेट करना चाहते हैं, तो नियंत्रण बनाएं और ऑनपेंट ओवरराइड में ड्राइंग करें।

मूल लिंक (अब मान्य नहीं): http://bobpowell.net/picturebox.htm

नोट: बॉब पावेल के ब्लॉग के लिए मूल लिंक अब कार्यात्मक है। मैंने यहां ऐतिहासिक उद्देश्यों के लिए इसे छोड़ दिया है। इस पोस्ट को संपादित करने की तिथि के अनुसार पृष्ठ की सामग्री को अभी भी इंटरनेट संग्रह (https://web.archive.org/web/20120330003635/http://bobpowell.net/picturebox.htm) पर देखा जा सकता है।

+2

+1 यह वास्तव में उचित उत्तर है। लिंक के लिए धन्यवाद, जो मूल समस्या का वर्णन करता है। – Sabuncu

+8

-1 "लिंक्रोट" ... और यह उत्तर कुछ संकेत देता है कि समस्या क्या है या इसके बजाय क्या करना है। "बाहरी संसाधनों के लिंक को प्रोत्साहित किया जाता है, लेकिन कृपया लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को कुछ पता चल जाएगा कि यह क्या है और यह क्यों है। लक्ष्य साइट है, तो हमेशा एक महत्वपूर्ण लिंक के सबसे प्रासंगिक भाग को उद्धृत करें पहुंच योग्य नहीं है या स्थायी रूप से ऑफ़लाइन चला जाता है। " स्रोत: http://stackoverflow.com/help/how-to-answer हालांकि मुझे "वेबैक मशीन" में संरक्षित बॉबपोवेल पेज मिलते हैं: https://web.archive.org/web/20120216111903/http: //bobpowell.net/picturebox.htm –

+0

यह एक भयानक उत्तर है। बॉबपावेल के (अन्यथा महान) पृष्ठ न केवल चले गए हैं, लेकिन किसी भी तरह से सुझाव नहीं देते कि आपको पिक्चरबॉक्स पर आकर्षित नहीं करना चाहिए। असल में उनका डिफ़ॉल्ट डबलबफरिंग यह एकमात्र नियंत्रण बनाता है जो बॉक्स से बाहर निकलने के लिए उपयुक्त है। बॉब केवल कटे हुए 'कंट्रोल। क्रिएट ग्राफिक्स' का उपयोग करने के खिलाफ चेतावनी देता है, भयानक एमएसडीएन से सभी नए उपहार कॉपी उदाहरण पृष्ठ शुरू करते हैं। – TaW

24

या दिखाने के लिए छवि पर आकर्षित और नियंत्रण करने के लिए छवि सौंपने के लिए है:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawLine(
      new Pen(Color.Red,2f), 
      new Point(0,0), 
      new Point(pictureBox1.Size.Width, pictureBox1.Size.Height)); 

     e.Graphics.DrawEllipse(
      new Pen(Color.Red, 2f), 
      0,0, pictureBox1.Size.Width, pictureBox1.Size.Height ); 
    } 

चित्र बॉक्स की पेंट घटना को संभालें और वहां अपना कस्टम ड्राइंग करें।

संबंधित मुद्दे