C#同步展示两个Panel或DataGridView控件的内容

  需要同步展示两个控件中的内容,由于内容较多,当滚动一个控件中的内容时,另一个控件中的内容也要同步滚动。Winform中带滚动条显示内容的控件主要使用Panel和DataGridView,前者需使用程序绘制要显示的内容,而后者则需要准备显示的数据即可。
  首先是Panel控件,该控件通过设置AutoScrollMinSize属性设置自动滚动区域的最小尺寸,当控件尺寸小于AutoScrollMinSize时,就会显示滚动条。然后设置Panel控件的Scroll事件,该事件是在用户移动滚动条时触发(移动水平或竖直滚动条都会触发),在Scroll事件中设置另一个Panel控件的AutoScrollPosition属性与当前控件保持一致。AutoScrollPosition属性控制滚动条的位置,但赋值时需赋予相反的值,具体原因详见参考文献1。

在这里插入图片描述

	pnlA.AutoScrollMinSize = new Size(1000, 1000);
    pnlB.AutoScrollMinSize = new Size(1000, 1000);
    
	private void pnl_Scroll(object sender, ScrollEventArgs e)
    {
        if(sender==pnlA)
        {
            pnlB.AutoScrollPosition = new Point(-pnlA.AutoScrollPosition.X, -pnlA.AutoScrollPosition.Y);
         }
        else if(sender==pnlB)
        {
            pnlA.AutoScrollPosition = new Point(-pnlB.AutoScrollPosition.X, -pnlB.AutoScrollPosition.Y);
        }
    }

在这里插入图片描述
  接下来是DataGridView控件,该控件中也有Scroll事件,但是并没有AutoScrollPosition属性,不过其属性中存在FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex属性,用于标识及设置显示在DataGridView控件显示区域中的第一行及第一列的索引。于是在Scroll事件中同步两个DataGridView控件的FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex属性,也勉强能做到同步展示内容。

	private void dgv_Scroll(object sender, ScrollEventArgs e)
    {
        if (sender == dgvA)
        {
            dgvB.FirstDisplayedScrollingRowIndex = dgvA.FirstDisplayedScrollingRowIndex;
            dgvB.FirstDisplayedScrollingColumnIndex = dgvA.FirstDisplayedScrollingColumnIndex;                
        }
        else if (sender == dgvB)
        {
            dgvA.FirstDisplayedScrollingRowIndex = dgvB.FirstDisplayedScrollingRowIndex;
            dgvA.FirstDisplayedScrollingColumnIndex = dgvB.FirstDisplayedScrollingColumnIndex;
        }
    }

在这里插入图片描述

参考文献:
[1]https://blog.51cto.com/biyusr/5263987

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值