簡體   English   中英

將自定義水平滾動條的滾動同步到datagridview的滾動

[英]syncing custom horizontal scrollbar's scroll to datagridview's scroll

我有一個datagridviews和兩個自定義滾動條-一個垂直滾動條和一個水平滾動條。

我在填充datagridview時調整滾動條的大小

scrollBarEx1.Maximum = dataGridView1.RowCount;
scrollBarEx3.Maximum = dataGridView1.ColumnCount;

這是datagridview1的滾動事件

private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
        {
            if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
            {
                scrollBarEx1.Value = e.NewValue;
            }
            else if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
            {
                scrollBarEx3.Value = e.NewValue;
            }
        }

這是兩個滾動條的滾動事件代碼

private void scrollBarEx1_Scroll(object sender, ScrollEventArgs e)
        {
            dataGridView1.Rows[dataGridView1.FirstDisplayedScrollingRowIndex].Height = e.NewValue;
}

private void scrollBarEx3_Scroll(object sender, ScrollEventArgs e)
        {
            dataGridView1.Columns[dataGridView1.FirstDisplayedScrollingColumnIndex].Width = e.NewValue;
        }

但是,只有垂直滾動條起作用。 水平滾動不會滾動,但是網格不會隨之滾動。 請幫助。

使用自定義滾動條時,請始終按以下方式設置最大值,大變化和小變化的值:

水平滾動

最大=總寬度
LargeChange =控制寬度
SmallChange =總寬度的10%,在這種情況下為第一列的寬度

垂直滾動

最大=總高度
LargeChange =控制高度
SmallChange =總高度的10%,在這種情況下為第一行的高度

所以對於水平:

//set these values probably at form load event
int totalwidth = dataGridView1.RowHeadersWidth + 1;

for( int i = 0; i < dataGridView1.Columns.Count; i++ ) {
    totalwidth += dataGridView1.Columns[ i ].Width;
}

hScrollBar1.Maximum = totalwidth;
hScrollBar1.LargeChange = dataGridView1.Width;
hScrollBar1.SmallChange= dataGridView1.Columns[ 0 ].Width;

private void dataGridView1_Scroll( object sender, ScrollEventArgs e ) {
    if( e.ScrollOrientation == ScrollOrientation.HorizontalScroll ) {
        hScrollBar1.Value = e.NewValue;
    }
}

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

編輯

對於DataGridView中的 verticall滾動,您不能按像素滾動,而只能按行滾動。 所以

垂直滾動

最大值=總行數
LargeChange =可見行數,即使是很小的零件數
SmallChange = 1

所以對於垂直

vScrollBar1.Maximum = dataGridView1.RowCount;
vScrollBar1.LargeChange = dataGridView1.DisplayedRowCount(true);
vScrollBar1.SmallChange = 1;

private void dataGridView1_Scroll( object sender, ScrollEventArgs e ) {
    if( e.ScrollOrientation == ScrollOrientation.VerticalScroll ) {
        vScrollBar1.Value = e.NewValue;
    }
}

private void vScrollBar1_Scroll( object sender, ScrollEventArgs e ) {  
    dataGridView1.FirstDisplayedScrollingRowIndex = e.NewValue;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM