C# 与使用DataGridView的excel类似的水平滚动
DataGridView可以在交错区域(类似于excel)中水平滚动C# 与使用DataGridView的excel类似的水平滚动,c#,datagridview,C#,Datagridview,DataGridView可以在交错区域(类似于excel)中水平滚动 我不需要沿着列单元格滚动(连续),而是当滚动到达单元格边界时,网格应该滚动下一列单元格。尝试使用FirstDisplayedScrollingColumnIndex属性。应该有帮助。如果要设置FirstDisplayedScrollingColumnIndex,则跳到指定列索引的开头 比如: protected override void OnScroll(ScrollEventArgs e) { base.OnScr
我不需要沿着列单元格滚动(连续),而是当滚动到达单元格边界时,网格应该滚动下一列单元格。尝试使用FirstDisplayedScrollingColumnIndex属性。应该有帮助。如果要设置FirstDisplayedScrollingColumnIndex,则跳到指定列索引的开头 比如:
protected override void OnScroll(ScrollEventArgs e) {
base.OnScroll(e);
this.FirstDisplayedScrollingColumnIndex = Convert.ToInt32(this.HorizontalScrollBar.Value / this.Width); }
可以替代OnScroll方法并计算下一个偏移
protected override void OnScroll(ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
{
e.NewValue = GetColumnOffset(e.NewValue);;
}
base.OnScroll(e);
}
private int GetColumnOffset(int offset)
{
int start = 0, end = 0;
foreach (var column in Columns.Cast<DataGridViewColumn>().Where(c=>!c.Frozen))
{
end = start + column.Width;
if (start <= offset && offset < end)
{
break;
}
start = end;
}
return start == offset ? offset : end;
}
protected override void OnScroll(ScrollEventArgs e)
{
if(e.ScrollOrientation==ScrollOrientation.HorizontalScroll)
{
e、 NewValue=GetColumnOffset(例如NewValue);;
}
base.OnScroll(e);
}
私有整型GetColumnCoffset(整型偏移)
{
int start=0,end=0;
foreach(Columns.Cast()中的var列,其中(c=>!c.freezed))
{
结束=开始+列宽;
如果(开始)