2010-07-22 9 views
6

मुझे चित्र बॉक्स के गैर-सार्वजनिक सदस्यों से छवि आयत का मूल्य प्राप्त करने की आवश्यकता है।पिक्चरबॉक्स के गैर-सार्वजनिक सदस्यों का मूल्य कैसे प्राप्त करें?

यह मूल्य कैसे प्राप्त करें?

अग्रिम धन्यवाद।

+1

क्या आपको लगता है कि मूल्य के साथ हासिल करना चाहते हैं? मुझे लगता है कि आप केवल एक स्वयं का चित्र बॉक्स बनाने में सफल हो सकते हैं जो डिफ़ॉल्ट से विरासत में मिलता है और गैर सार्वजनिक सदस्य – RvdK

+1

पुनर्प्राप्त करने के लिए एक फ़ंक्शन जोड़ता है जो सबसे अधिक मदद करने वाले उत्तर को स्वीकार करना न भूलें। उपयुक्त उत्तर के बगल में ऊपर और नीचे तीर के बगल में टिक पर क्लिक करें। – GenericTypeTea

उत्तर

9

यह कैसे मान प्राप्त करने, प्रतिबिंब का उपयोग कर रहा है:

PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", 
    System.Reflection.BindingFlags.Public | 
    System.Reflection.BindingFlags.NonPublic | 
    System.Reflection.BindingFlags.Instance); 

Rectangle rectangle = (Rectangle)pInfo.GetValue(pictureBox1, null); 

के रूप में जॉन ने कहा है, वहाँ प्राप्त करने तुम क्या करने की कोशिश कर रहे हैं की एक बेहतर तरीका हो सकता है,। प्रतिबिंब के माध्यम से निजी सदस्यों तक पहुंच आमतौर पर एक बहुत बड़ी कोड गंध है।

+0

धन्यवाद जॉन और जेनेरिक, यह मेरी समस्या हल हो गया .. – Nivas

+0

@Nivas - सही उत्तर स्वीकार करने के लिए मत भूलना। – GenericTypeTea

2

ठीक है, आप प्रतिबिंब के साथ कर सकते हैं ... लेकिन आपको नहीं करना चाहिए। यह स्पष्ट नहीं है कि "छवि आयत के मूल्य" से आपका क्या मतलब है लेकिन आपको निश्चित रूप से सार्वजनिक एपीआई के माध्यम से यह सब करने की कोशिश करनी चाहिए। आप क्या हासिल करने का प्रयास कर रहे हैं? एक अलग तरीका हो सकता है।

संपादित करें: ठीक है, अब मैं देख रहा हूँ संपत्ति आप पहुँचने का प्रयास कर रहे हैं ... आप इस Connect issue 2004 में दायर में रुचि हो सकती आप केवल एक ही इस चाहते हैं नहीं कर रहे हैं ... हालांकि कि क्या आप की जरूरत है यह एक ही कारण के लिए या नहीं, मुझे नहीं पता।

+0

@ एमआर स्कीट - उनका मतलब है कि वह 'चित्र बॉक्स' से 'ImageRectangle' संपत्ति चाहता है। – GenericTypeTea

0

हालांकि निवास ने यह नहीं बताया कि वह क्या हासिल करना चाहता था, मुझे संदेह है कि यह मैंने जो देखा है उसके समान है - उपयोगकर्ता द्वारा खींचे गए (यानी, फसल) आयत को चित्र बॉक्स की छवि स्थान में अनुवाद करना। मैंने आरवीडीके के सुझाव के रूप में विरासत की कोशिश नहीं की, मैंने प्रतिबिंब विधि को त्वरित कार्यवाही के रूप में उपयोग किया। आरवीडीके के सुझाव या माइक्रोसॉफ्ट के उद्घाटन के लिए एक विकल्प ImageRectangle तक पहुंच प्राप्त करने के लिए, एक RectangleToImageRectangle विधि प्रदान करना होगा। जो मुझे लगता है कि मैं पीबी से विरासत में प्राप्त ऑब्जेक्ट में लपेट सकता हूं ...

माइक्रोसॉफ्ट कनेक्ट इश्यू लिंक टूटा हुआ है।

यहाँ कोड मैं प्रयोग किया जाता है, यह पंजाब की छवि की आयत प्रदान करता है, और .Zoom और .StretchImage मोड के लिए परीक्षण किया गया था है:

PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle", 
      System.Reflection.BindingFlags.Public | 
      System.Reflection.BindingFlags.NonPublic | 
      System.Reflection.BindingFlags.Instance); 

Rectangle ImRectangle = (Rectangle)pInfo.GetValue(pictureBox1, null); 

Point rTL = new Point((rectCropArea.Left - ImRectangle.Left) * pictureBox1.Image.Width/ImRectangle.Width, 
         (rectCropArea.Top - ImRectangle.Top) * pictureBox1.Image.Height/ImRectangle.Height); 
Size rSz = new Size(pictureBox1.Image.Width * rectCropArea.Width/ImRectangle.Width, 
        pictureBox1.Image.Height * rectCropArea.Height/ImRectangle.Height); 

'rect' = new Rectangle(rTL,rSz); 
संबंधित मुद्दे