我有一个AutoScroll
设置为true的表单。表单启动时窗体上的某些控件是不可见的,但它们的位置已设置。一旦控件变为可见,则相对于当前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
属性不会立即更新。
答案 0 :(得分: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));
}
}
}