2010-07-22 11 views
6

Ho bisogno di ottenere il valore del rettangolo immagine da membri non pubblici di picturebox.Come ottenere il valore dei membri non pubblici di picturebox?

Come ottenere questo valore?

Grazie in anticipo.

+1

Che cosa si vuole ottenere con quel valore? Penso che si possa avere successo solo creando una propria picturebox che erediti da quella predefinita e aggiungendo una funzione per recuperare il membro non pubblico – RvdK

+1

Non dimenticare di accettare la risposta che ha aiutato di più. Fare clic sul segno di spunta accanto alla freccia su e giù accanto alla risposta appropriata. – GenericTypeTea

risposta

9

Questo è il modo per ottenere il valore, utilizzando la riflessione:

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); 

Anche se, come ha detto Jon, ci può essere un modo migliore di realizzare quello che stai cercando di fare. L'accesso ai membri privati ​​tramite la riflessione è solitamente un odore di codice piuttosto grande.

+0

Grazie John e Generic, ha risolto il mio problema .. – Nivas

+0

@Nivas - Non dimenticare di accettare la risposta corretta. – GenericTypeTea

2

Bene, si potrebbe farlo con la riflessione ... ma non si dovrebbe. Non è chiaro esattamente cosa intendi per "valore di Image rectangle" ma dovresti assolutamente provare a fare tutto ciò tramite l'API pubblica. Cosa stai cercando di ottenere? Potrebbe esserci un modo diverso.

EDIT: Okay, ora vedo la proprietà a cui stai tentando di accedere ... potresti essere interessato a questo Connect issue archiviato nel 2004. Non sei l'unico a volerlo ... anche se hai bisogno per lo stesso motivo o no, non lo so.

+0

@Mr Skeet - Vuol dire che vuole la proprietà 'ImageRectangle' dal' PictureBox'. – GenericTypeTea

0

Anche se Nivas non ha dichiarato ciò che voleva realizzare, sospetto che sia simile a quello che ho appena visto - la traduzione di un rettangolo disegnato dall'utente (cioè ritaglio) nello spazio immagine della casella immagine. Non ho provato l'ereditarietà come suggeriva RvdK, ho usato il metodo di riflessione come soluzione rapida. Un'alternativa al suggerimento di RvdK o Microsoft che apre l'accesso a ImageRectangle, sarebbe quella di fornire un metodo RectangleToImageRectangle. Quale suppongo che potrei avvolgere in un oggetto che eredita da PB ...

Il collegamento Problema Microsoft Connect è rotto.

Ecco il codice che ho usato, fornisce il rettangolo dell'immagine del PB, e è stato controllato in modalità .ZOOM e .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); 
Problemi correlati