2014-06-30 9 views
8

Vorrei visualizzare qualcosa se la visualizzazione della griglia di dati è lunga e mostra una barra di scorrimento ma non so come controllare se la barra di scorrimento è visibile. Non posso semplicemente aggiungere le righe poiché alcune potrebbero non essere visibili. Non posso utilizzare un evento poiché il mio codice è già presente in un evento.controllare se una barra di scorrimento è visibile in una vista datagrid

+0

bisogno di maggiori dettagli. Cosa hai provato? cosa vuoi esattamente fare? – Alezis

+0

Aggiungo un indicatore accanto alla barra di scorrimento che indica dove sono le informazioni importanti, simile a Visual Studio. – user373864q

+1

Non sono sicuro di cosa intendi esattamente. Hai provato questo http://stackoverflow.com/questions/2685651/how-to-detect-the-vertical-scrollbar-in-a-datagridview-control o semplicemente controllando la proprietà 'Visible' della barra di scorrimento? – Alezis

risposta

9

si può provare questo fuori:

foreach (var scroll in dataGridView1.Controls.OfType<VScrollBar>()) 
{ 
    //your checking here 
    //specifically... if(scroll.Visible) 
} 
+0

o molto buone. – barlop

+0

@barlop ringraziamenti :) – terrybozzio

+0

ha finito per utilizzare tale metodo per ottenere una larghezza dati della larghezza corretta, anche se significa incrementare la larghezza della vista dati di uno fino a quando le barre di scorrimento orizzontali non sono visibili http://stackoverflow.com/questions/37635932/calculate-padding-of-datagridview-when-padding-is-greater-than-two Se conosci un modo più efficiente fammi sapere. Ta – barlop

2

Per determinare se la barra di scorrimento verticale è presente, è necessario verificare quanto sono alte le righe visibili e confrontarle con l'altezza della vista del datagrid.

if(dgv1.Height > dgv1.Rows.GetRowsHeight(DataGridViewElementStates.Visible)) 
{ 
    // Scrollbar not visible 
} 
else 
{ 
    // Scrollbar visible 
} 

Anche se per essere più esatti, potrebbe essere necessario includere un controllo della larghezza delle colonne come la presenza di una barra di scorrimento orizzontale, potrebbe creare una barra di scorrimento verticale che altrimenti non c'è.

3

Il DataGridView 's ScrollbarsProprietà può essere messa in discussione con il ScrollBarsenumerazione mascherando con quello che ti interessa in questo modo:

if ((dataGridView1.ScrollBars & ScrollBars.Vertical) != ScrollBars.None) ... 

nota, che i due 'ScrollBars' sono cose diverse qui!

+0

bene questo programma crea una vista datagrid, che certo non ha barre di scorrimento anche se quella linea mostra come averli http://pastebin.com/raw/vfu6j09T – barlop

+0

Sory, ma non capisco. – TaW

+0

Penso che stavo dicendo che nel codice al collegamento pastebin mostra sempre quella messagebox anche quando il datagridview non ha barre di scorrimento – barlop

4

preferisco questo uno:

//modif is a modifier for the adjustment of the Client size of the DGV window 
//getDGVWidth() is a custom method to get needed width of the DataGridView 

int modif = 0; 
if (DataGridView.Controls.OfType<VScrollBar>().First().Visible) 
{ 
    modif = SystemInformation.VerticalScrollBarWidth; 
} 
this.ClientSize = new Size(getDGVWidth() + modif, [wantedSizeOfWindow]); 

quindi l'unica condizione booleana che serve è:

if (DataGridView.Controls.OfType<VScrollBar>().First().Visible) 
{ 
    //want you want to do 
} 
+0

Bella soluzione. Suggerisco di aggiungere un controllo aggiuntivo perché First() potrebbe generare un'eccezione: 'var vScrollBar = dgvEntity.Controls.OfType () .FirstOrDefault(); if (vScrollBar! = Null && vScrollBar.Visible) vScrollbarWidth = SystemInformation.VerticalScrollBarWidth; ' – jacktric

Problemi correlati