【发布时间】:2023-04-03 14:08:01
【问题描述】:
DataGridView 可以在交错的庄园中水平滚动(类似于 excel)。
我不需要沿列单元格滚动(连续),而是当滚动到达单元格边界时,网格应该滚动下一个列单元格。
【问题讨论】:
标签: c# datagridview
DataGridView 可以在交错的庄园中水平滚动(类似于 excel)。
我不需要沿列单元格滚动(连续),而是当滚动到达单元格边界时,网格应该滚动下一个列单元格。
【问题讨论】:
标签: c# datagridview
您可以覆盖 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;
}
【讨论】:
尝试使用 FirstDisplayedScrollingColumnIndex 属性。应该有帮助。如果设置 FirstDisplayedScrollingColumnIndex 则跳转到指定列索引的开头。
类似:
protected override void OnScroll(ScrollEventArgs e) {
base.OnScroll(e);
this.FirstDisplayedScrollingColumnIndex = Convert.ToInt32(this.HorizontalScrollBar.Value / this.Width); }
【讨论】: