1

我有一个AutoScroll设置为 true 的表单。窗体上的某些控件在窗体启动时是不可见的,但它们的位置已经设​​置。一旦控件变为可见,就会相对于 current 计算位置AutoScrollPosition,这是完全不需要的。

知道如何防止这种情况吗?

我尝试在控件首次显示时设置位置,如下所示:

 void OnControlVisibleChanged(object sender, EventArgs e)
    {
        Control ctl = (Control)sender;
        if (ctl.Visible)
        {
            ctl.Location = Point.Add(ctl.Location, new Size(this.AutoScrollPosition));
            ctl.VisibleChanged -= OnControlVisibleChanged;
        }
    }

它适用于某些控件,而其他控件则无效。我不知道为什么。
编辑:似乎当控件变为可见时,真正的 AutoScrollPosition 会发生变化,但AutoScrollPosition属性不会立即更新。

4

1 回答 1

1

AutoSize = True似乎会干扰您的代码。我不知道这是否是唯一的失败点,但这在我的测试中有效:

void OnControlVisibleChanged(object sender, EventArgs e) {
  Control ctl = (Control)sender;
  if (ctl.Visible) {
    bool moveOK = true;
    if (ctl.GetType().GetProperty("AutoSize") != null) {
      if ((bool)ctl.GetType().GetProperty("AutoSize").GetValue(ctl, null)) {
        moveOK = false;
      }
    }
    if (moveOK) {
      ctl.Location = Point.Add(ctl.Location, new Size(this.AutoScrollPosition));
    }
  }
}
于 2012-10-31T15:50:46.160 回答