最近项目里要写GDI+其中就有一个用外部ScrollBar代替 dataGridView1内部的ScrollBar的问题。
实现的方式是用自定义控件盖住dataGridView内部的ScrollBar。
本文主要讲:scrollBar的使用,达到的效果如图,外部的scrollBar能够和dataGridView或者系统的滚动条一样精确的滚动,一样精确的长度:
1 是dataGridView内部的滚动条,相当精确了,滚动到最右边正好所有数据都能显示出来,比例大概是: 拖动条的长度:scrollBar长度 = 显示出的数据的长度:所有数据的长度。
2.是我实现的外部的VScrollBar.基本满足上述的比例。
不需要这么精确的,只需要知道ScrollBar的属性以及如何简单使用的请移步:
http://blog.csdn.net/truelove12358/article/details/17309143
下面是实现的代码:
关键是如何设置属性及滚动事件,
private void InitScrollBar()
{
hScrollBar1.Dock = DockStyle.Bottom;
int count = dataGridView1.ColumnCount;
int gridWidth = 0;
for (int k=0; k < count; k++)
{
gridWidth += dataGridView1.Columns[k].Width;
}
//关键代码位置
hScrollBar1.Maximum = gridWidth;
hScrollBar1.Minimum = 0;
hScrollBar1.SmallChange = gridWidth / count;
hScrollBar1.LargeChange = dataGridView1.Width - 5;//微调这里的 5
this.dataGridView1.ScrollBars = ScrollBars.Both;
//this.hScrollBarEx1.Scroll += new ScrollEventHandler(hScrollBarEx1_Scroll);
this.hScrollBar1.Scroll +=new ScrollEventHandler(hScrollBar1_Scroll);
}
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{//关键代码位置
this.dataGridView1.HorizontalScrollingOffset = hScrollBar1.Value; Application.DoEvents();
}