奇怪的AutoScroll行为

时间:2012-02-27 11:19:59

标签: c# .net winforms

简介

我编写了一个简单的用户控件。

控件包含一个FlowLayoutPanel和一个按钮。

按钮单击事件处理程序如下:

private void uxAdd_Click(object sender, EventArgs e)
{
    count++;
    Label label = new Label();
    label.Text = "Label " + count.ToString();
    uxFlowLayout.Controls.Add(label);
}

Add按钮会在FlowLayoutPanel上添加标签,因为FlowLayoutPanel.AutoSize和控件的AutoSize属性等于true,FlowLayoutPanel.FlowDirection等于{ {1}}控件的高度会增加。

我已将用户控件放在表单上,​​并将表单的TopDown属性设置为true。

我还编写了以下 Layout 事件处理程序:

AutoScroll

uxSection 是我在简介部分开头讨论的用户控件)

问题

以下是我正在做的事情:

第0步。运行程序。

第1步。添加一些标签,以便显示垂直滚动条。

第2步。滚动到表单底部。

第3步。水平调整表单大小。

enter image description here

正如您所看到的,在调整表单大小后,滚动条位置不在底部(我希望它位于底部)。

所以问题是,我错过了什么?为什么滚动条会重置到顶部?

1 个答案:

答案 0 :(得分:0)

这是因为在调整大小时会重新绘制整个控件。

您需要将滚动条的位置保存在变量中,以便在调整大小事件时可以重置滚动条的位置,或者您想要将滚动条推到列表的底部通过使用列表中的项目数来计算底部元素的位置然后将滚动条推到该位置时触发resize事件。