2012-11-09 13 views
6

In un pannello disegno i controlli come il pulsante/casella di testo posizionati a partire (0,0) nel pannello. Questi controlli sono invisibili e disabilitati all'inizio. Ho un pulsante all'esterno del pannello che rende visibili questi pulsanti/casella di testo quando vengono premuti e li posiziono in una nuova posizione nel pannello.dipingendo un pulsante nel pannello Winform mentre il pannello scorre.

Il problema è che se l'utente fa scorrere il pannello su alcuni (x, y) e quindi preme il pulsante "Rendi visibile", la nuova posizione (x, y) del pulsante viene calcolata dalla posizione corrente (x, y) del pannello - non dalla parte superiore (0,0) del pannello.

Mi chiedo se questo è il comportamento corretto del pannello e che per risolvere questo ho bisogno di considerare lo this.VerticalScroll.Value come un (x, y) offset quando riposiziono i pulsanti.

enter image description here

+2

È necessario utilizzare la proprietà AutoScrollPosition del pannello per regolare la posizione del pulsante. –

+0

Le illustrazioni delle immagini potrebbero aiutare a mostrare il comportamento previsto e attuale. – Neolisk

+0

ho una foto ma non sono riuscito a postarla ... ho bisogno di più reputazione su SO. @HansPassant Da MSDN AutoScrollPosition si presenta come ciò di cui avevo bisogno.myButton.Location = new Point ( 0 + panel1.AutoScrollPosition.X, 0 + panel1.AutoScrollPosition.Y); – Davvit

risposta

0

Non sono sicuro se sarebbe d'aiuto nella vostra situazione, ma penso che vale la pena provare:

Se si dovesse progettare il Pannello usando Visual Designer, vi consiglio di utilizzando due pannelli: uno di dimensioni standard con tutti i controlli, la sua dimensione consente una facile progettazione; e quella più piccola che ha la dimensione fisica prevista di . Quindi aggiungi semplicemente quello grande come figlio unico di quello più piccolo (come innerPanel in bottomPanel).

Vedere questo articolo Article: WinForms AutoScroll Experiment per ulteriori dettagli.

2

Questo è ciò che ha funzionato per me. Quando si arriva alla Y di voi tasto/testo ecc fare:

relativeControlTop = theControl.Top - thePanel.AutoScrollPosition.Y;

Quando si imposta la parte superiore fare:

relativeControlTop = theControl.Top + thePanel.AutoScrollPosition.Y;

Spero che questo aiuti.

Problemi correlati