2011-01-13 14 views
10

A volte, ho una picturebox che dice 100x100. Ma l'immagine che mostrerà è in realtà 100x400.Come posso mostrare le barre di scorrimento su un controllo PictureBox?

Non voglio aumentare la dimensione della casella immagine stessa. Invece, mi piacerebbe creare una barra di scorrimento verticale (o orizzontale se necessario).

Impossibile trovare una barra di scorrimento nella casella degli strumenti, quindi suppongo di doverlo codificare. Ma come? E mi chiedo ancora se non ho fatto un errore e non ho visto la barra di scorrimento nella casella degli strumenti. Le mie scuse quindi :(

risposta

19

suppongo che si potrebbe aggiungere controlli ScrollBar separati e sincronizzare le loro Scroll eventi con l'offset in cui l'immagine nel PictureBox è tratto, ma che suona come lavoro vero e proprio. C'è un modo migliore.

  1. Aggiungi un controllo Panel al modulo e imposta il valore AutoScroll property su "True". In questo modo il controllo mostrerà automaticamente le barre di scorrimento quando contiene contenuto esterno ai limiti attualmente visibili. .NET Framework si prenderà cura di tutto per te sotto le copertine, senza che tu debba scrivere una sola riga di codice.

  2. Trascinare e rilasciare il vostro controllo PictureBox all'interno del Panel di controllo appena aggiunto. Il controllo Panel rileva quindi che uno dei relativi controlli figlio è più grande dell'area visibile e mostra barre di scorrimento, grazie alla proprietà AutoScroll. Quando l'utente sposta le barre di scorrimento, la parte dell'immagine nel tuo PictureBox visibile sarà automaticamente regolata. Magia.

(Il motivo è necessario utilizzare un controllo Panel come contenitore è perché PictureBox non eredita direttamente dalla classe ScrollableControl di base, che è ciò che fornisce la proprietà AutoScroll.)

+2

Ho dovuto impostare la proprietà 'SizeMode' di 'PictureBox' su 'AutoSize' per rendere questa soluzione funzionante – Niroshan

+1

E mi piacerebbe per notare che PictureBox non può essere ancorato nel Pannello. – miroxlav

2

Non ci sono barre di scorrimento automatiche su una casella di immagine, ma è possibile aggiungere il controllo VScrollBar (e HScrollBar) al modulo e gestire manualmente lo scorrimento dell'immagine ridisegnandolo con un offset diverso ogni volta che evento scroll viene licenziato.

+1

Sono troppo pigro per farlo. ;-) –

+0

La tua strada è molto più veloce, ma non ti godi la frustrazione di capire in che modo compensare l'immagine quando scorre o quando spostare le barre di scorrimento dove. – xpda

+0

Non voglio frustrazioni: (....... ma hai una bella idea lì. – Voldemort

3

Ho provato questo e ha funzionato bene Ma ho notato che se la picturebox è ancorata nel pannello, la picturebox viene automaticamente impostata sulla dimensione del pannello genitore e non può essere impostata più grande (almeno non in alcun modo che io possa trovare). Questo sconfigge lo scopo della tecnica. Quindi - metti la picturebox sul pannello, ma non agganciarla, e funzionerà perfettamente.