none
如何获得自动滚动条滚动位置 RRS feed

  • 问题

  • 在WinForm下,希望两个控件的滚动条同步。比如在移动一个DataGridView控件的纵向自动滚动条的同时,也设置另一个DataGridView的纵向自动滚动条的位置,使其与前一个同时变化。
    • 已编辑 Ma Qiang 2011年11月14日 6:33
    2011年11月14日 6:29

答案

  • 在DataGridView 的scroll 事件中去处理滚动事件,让他们同步执行。我有段代码供你参考:

      private int iScrollPos_1;                //记录dataGridView1的纵向滚动条的位置
            private int iScrollPos_2;  //记录dataGridView2的纵向滚动条的位置
    //dataGridView2的滚动事件。这里仅仅处理了纵向同步。
      void dataGridView2_Scroll(object sender, ScrollEventArgs e)
            {
                if ((sender == dataGridView2) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
                {
                    iScrollPos_2 = dataGridView2.FirstDisplayedScrollingRowIndex;//得到dataGirdView2的滚动条位置。
                    dataGridView1_Scroll(dataGridView2,new ScrollEventArgs (ScrollEventType.ThumbPosition,e.NewValue,ScrollOrientation.VerticalScroll));
    //调用dataGridView1的滚动事件。
                }
          if((sender ==dataGridView1)&&(e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              dataGridView2.FirstDisplayedScrollingRowIndex = iScrollPos_1;//从dataGirdView1得到滚动条位置。
    
          }
               
            }
    //dataGridView1的滚动事件。这里仅仅处理了纵向同步。
      private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
      {
          if ((sender == dataGridView1) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              iScrollPos_1 = dataGridView1.FirstDisplayedScrollingRowIndex;//;//得到dataGirdView1的滚动条位置。
    
              dataGridView2_Scroll(dataGridView1, new ScrollEventArgs(ScrollEventType.ThumbPosition, e.NewValue, ScrollOrientation.VerticalScroll));
    ////调用dataGridView2的滚动事件。
          }
          if ((sender == dataGridView2) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              dataGridView1.FirstDisplayedScrollingRowIndex = iScrollPos_2;//从dataGirdView2得到滚动条位置。
          }
      }
    
    希望对您有所帮助


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月16日 2:44
    版主

全部回复

  • 在DataGridView 的scroll 事件中去处理滚动事件,让他们同步执行。我有段代码供你参考:

      private int iScrollPos_1;                //记录dataGridView1的纵向滚动条的位置
            private int iScrollPos_2;  //记录dataGridView2的纵向滚动条的位置
    //dataGridView2的滚动事件。这里仅仅处理了纵向同步。
      void dataGridView2_Scroll(object sender, ScrollEventArgs e)
            {
                if ((sender == dataGridView2) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
                {
                    iScrollPos_2 = dataGridView2.FirstDisplayedScrollingRowIndex;//得到dataGirdView2的滚动条位置。
                    dataGridView1_Scroll(dataGridView2,new ScrollEventArgs (ScrollEventType.ThumbPosition,e.NewValue,ScrollOrientation.VerticalScroll));
    //调用dataGridView1的滚动事件。
                }
          if((sender ==dataGridView1)&&(e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              dataGridView2.FirstDisplayedScrollingRowIndex = iScrollPos_1;//从dataGirdView1得到滚动条位置。
    
          }
               
            }
    //dataGridView1的滚动事件。这里仅仅处理了纵向同步。
      private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
      {
          if ((sender == dataGridView1) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              iScrollPos_1 = dataGridView1.FirstDisplayedScrollingRowIndex;//;//得到dataGirdView1的滚动条位置。
    
              dataGridView2_Scroll(dataGridView1, new ScrollEventArgs(ScrollEventType.ThumbPosition, e.NewValue, ScrollOrientation.VerticalScroll));
    ////调用dataGridView2的滚动事件。
          }
          if ((sender == dataGridView2) && (e.ScrollOrientation == ScrollOrientation.VerticalScroll))
          {
              dataGridView1.FirstDisplayedScrollingRowIndex = iScrollPos_2;//从dataGirdView2得到滚动条位置。
          }
      }
    
    希望对您有所帮助


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月16日 2:44
    版主
  • 非常感谢您的帮助。
    2011年12月22日 23:52
  • 非常感谢您的帮助。

    不客气,欢迎再来讨论C#技术知识。
    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年12月23日 1:35
    版主