ScrollBar控件如何配合FlexGrid使用?
现在有一个场景,使用了FlexGrid,但不希望使用FlexGrid自带的横向滚动条,希望能够使用一个单独的C1HScrollBar控件来控制这个FlexGrid的横向滚动
现在已知可以在ScrollBar的Scroll事件中,去处理FlexGrid的ScrollPosition属性
但存在两个问题:
1. 在Scoll事件中,只有e.OldValue和e.NewValue可用,这是滚动条的位移变化,但是和FlexGrid不匹配,结果是,ScrollBar移动了很远,FlexGrid才滚动了一点,如何才能计算其移动的比例?
2. ScrollBar的特点应该是,当可滚动范围越小,其内部的那个Bar的长度就越长,这个应该如何设置?
没法直接获取可滚动范围,建议可以模拟把表格滚动到最后一行最后一列,然后再去获取最大的scrollpositon,参考代码
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
c1FlexGrid1.TopRow = c1FlexGrid1.Rows.Count - 1;
c1FlexGrid1.LeftCol = c1FlexGrid1.Cols.Count - 1;
var point = c1FlexGrid1.ScrollPosition;
hScrollBar1.Minimum = 0;
hScrollBar1.Maximum = -point.X;
hScrollBar1.Scroll += HScrollBar1_Scroll;
c1FlexGrid1.TopRow = 0;
c1FlexGrid1.LeftCol = 0;
}
private void HScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
c1FlexGrid1.ScrollPosition = new Point(-hScrollBar1.Value ,c1FlexGrid1.ScrollPosition.Y);
}
页:
[1]