2013-08-12 2 views
3

Я ищу, чтобы узнать, удерживает ли пользователь в настоящее время вертикальную полосу прокрутки или нет.Получить Пролистает ли пользователь DataGridView или нет

Этот вопрос возникает из-за того, что прокрутка отменяется при обновлении DataSource DataGridView.

На что я надеюсь, это сделать способ расширения, например IsUserScrolling(), надеть DataGridView. Идея заключается в том, что я не обновляю DataGridView до тех пор, пока пользователь не перестанет прокручивать.

+0

Mr Universe, если мой ответ помог вам, пожалуйста, примите его, если у вас есть какие-либо дополнительные вопросы я Вот –

ответ

0

Я искал его и нашел ответ. она не может быть идеальным ответом, но это работает:

Я создал dataGridView, и создал hScrollBar, поставил hScrollBar на верхней части панели dataGridView прокрутки (вы можете использовать vScrollBar, если вы имели в виду вертикальная), установите ширина полосы прокрутки, чтобы быть таким же, как dataGridView, и на события Scroll, я сделал:

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e) 
    { 
    dataGridView1.HorizontalScrollingOffset = hScrollBar1.Value; 
    } 

и таким образом, вы можете использовать MouseDown и MouseUp события hScrollBar. Вы также пришли

2

Вы можете знать, если пользователь прокручивать DataGridView через Scroll событие, вы можете знать, если пользователь держит мышь вниз на Thumb и прокрутить через его ScrollEventArgs как это:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){ 
    if(e.ScrollOrientation == ScrollOrientation.VerticalScroll && 
    (e.Type == ScrollEventType.LargeIncrement || e.Type == ScrollEventType.LargeDecrement)){ 
    //your code here 
    } 
} 

код, приведенный выше почти работает но каким-то образом вы можете изменить VerticalScroll.Value (этого не существует) с программным обеспечением Large Change, событие будет запущено, даже если пользователь не удерживает мышь на вертикальном пальце. Таким образом, мы можем добавить условие MouseButtons == MouseButtons.Left, чтобы заставить его работать лучше:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){ 
    if(e.ScrollOrientation == ScrollOrientation.VerticalScroll && MouseButtons == MouseButtons.Left && 
    (e.Type == ScrollEventType.LargeIncrement || e.Type == ScrollEventType.LargeDecrement)){ 
    //your code here 
    } 
} 

Другой короткий способ обнаружить, если пользователь держит мышь вниз везде на вертикальной полосе прокрутки (как Thumb и Arrow Repeat button), используя HitTest метод, вы можете добавить дополнительный код сделать его работу более надежно, так что мы не пропустить какое-то свиток с коммунистической программой реального действием пользователя прокрутки:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){ 
    Point p = dataGridView1.PointToClient(MousePosition); 
    if (dataGridView1.HitTest(p.X, p.Y).Type == DataGridViewHitTestType.VerticalScrollBar){ 
    //Your code here 
    } 
} 
Смежные вопросы