【问题标题】:Repaint of panel面板重绘
【发布时间】:2010-11-10 23:58:48
【问题描述】:

我的问题是面板中有一个面板。在里面我将AutoScroll 属性设置为true。当我打开一个新窗口时,此面板将滚动到开始。

我这样做,我在打开新窗口之前保存位置,并在关闭它之后设置它。它有效,但它跳到开头,然后回到我的位置。

【问题讨论】:

  • 网络表单? aps.net?你能发布一些代码来更好地解释它吗?
  • 我在这里怀疑 WinForms。

标签: c# winforms scroll panel


【解决方案1】:

您是否尝试将autoscroll 设置为false

【讨论】:

    【解决方案2】:

    AutoScrollPosition 属性有点搞笑。当您读取它时,它会返回当前的滚动偏移量,但是当您分配它时,您需要反转值:

    private static Point GetAutoScrollPosition(Panel panel)
    {
        return panel.AutoScrollPosition;
    }
    
    private static void SetAutoScrollPosition(Panel panel, Point position)
    {
        panel.AutoScrollPosition = new Point(-position.X, -position.Y);
    }
    

    现在您可以检索当前位置并将其设置为:

    Point pos = GetAutoScrollPosition(myPanel);
    SetAutoScrollPosition(myPanel, pos);
    

    【讨论】:

      【解决方案3】:

      我做的事情就像你写的那样

      _scrollPozition = -(pnlMain.AutoScrollPosition.Y); DialogResult 结果 = MessageBox.Show("删除:", MessageBoxButtons.YesNo); dgvClendar.Focus();

      private void pnlMain_Paint(对象发送者,PaintEventArgs e) {

              if (pnlMain.AutoScrollPosition.Y == 0)
              {
                  pnlMain.AutoScrollPosition = new Point(0, _scrollPozition);
                  _scrollPozition = 0;
              }
          }
      

      在油漆上它是固定的,但是如果你看一下,一切都会被移动。我需要阻止此滚动开始,或阻止绘画,并在滚动到当前位置后重新绘画。

      【讨论】:

      • 你不想在 Paint 事件中这样做;一旦面板的某些部分需要重新粉刷,它就会一遍又一遍地升起。在 Form_Load 或表单可见之前发生的其他事件期间分配位置。
      猜你喜欢
      • 2012-01-15
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 2012-09-22
      • 2017-10-09
      相关资源
      最近更新 更多