2012-10-24 7 views
5

Ho un controllo utente, che è controllo scorrevole, e voglio cambiare il suo AutoScrollPosition (solo il valore X).AutoScrollPosition non segnala il valore corretto dopo averlo impostato su una posizione punto

lo sto facendo in questo modo:

int newScrollX = myFunction(); 
Point p = new Point(newScrollX, this.AutoScrollPosition.Y); 
this.AutoScrollPosition = p; 

newScrollX ottiene il valore corretto, p ottiene il punto giusto, ma dopo la linea di impostazione AutoScrollPosition, l'AutoScrollPosition è (0,0).

Qual è il problema?

Grazie

+3

Qual è il valore di newScrollX? AutoScrollPosition è un po 'strano: devi passare un valore positivo ma segnalerà un valore negativo. – LarsTech

risposta

13

AutoScrollPosition è abbastanza ingombrante.

Di solito si ottiene valori negativi quando si fa questo:

Point p = this.AutoScrollPosition; 

ma quando si imposta la posizione di scorrimento è necessario utilizzare valori positivi ... in modo da ripristinare la stessa esatta posizione di scorrimento è necessario invertire i numeri negativi :

this.AutoScrollPosition = new Point(-p.X, -p.Y) 

In caso contrario, l'AutoScrollPosition sarà 0,0 come osservato.

+2

questo non è solo "ingombrante", è contro-intuitivo. Ma grazie per questa risposta, molto utile –

+0

Hai salvato la mia giornata, grazie. – mikesneider

+0

questo non è solo "contro-intuitivo", è sbagliato: o) AutoScrollPosition è una proprietà. Se lo si imposta, non dovrebbe restituire qualcosa di diverso. Se imposti valori negativi, li cambia a 0. Ma se imposti valori positivi li restituisce come negativi. L'impostazione dovrebbe quindi essere un metodo e ottenere una proprietà di sola lettura. Se avessi un oggetto Car e impostassi la proprietà Color su Green e la proprietà Color restituisse immediatamente Red, penso che saremmo d'accordo che questa è una classe molto mal progettata – Gwynge