我写了一个简单的用户控制。
该控件包含一个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
属性等于真实FlowLayoutPanel.FlowDirection
等于TopDown
控制会身高增加。
我已将我的用户控件放在窗体上,并将窗体的AutoScroll
属性设置为true。
而且我写了下面布局事件处理程序:
private void MainForm_Layout(object sender, LayoutEventArgs e)
{
uxSection.Width = this.ClientSize.Width;
}
(uxSection是我在介绍部分的开头讲的用户控件)
问题
这是我在做什么:
步骤0。运行该程序。
步骤1。添加几个标签,以便显示垂直滚动条。
步骤2。滚动到表单底部。
步骤3。水平调整窗体大小。
正如你所看到的,调整后的形式,滚动条位置是不是在底部(我希望它是在底部)。
所以问题是,我错过了什么?为什么滚动条重置到顶部?
为什么它看起来像滚动条是在窗体上,而不是在UserControl? FlowLayoutPanel中的按钮也是?标签无法获得焦点,但您的按钮可以,这就是为什么它滚动回到视图。 WinForms试图帮助用户在屏幕上显示活动控件。 – LarsTech 2012-02-28 13:57:23
@LarsTech:现货! – RvdK 2012-02-28 14:11:25
@LarsTech:谢谢你的提示。经过一番谷歌搜索后,我发现了一个解决方法:http://nickstips.wordpress.com/2010/03/03/c-panel-resets-scroll-position-after-focus-is-lost-and-regained/ – 2012-02-29 07:31:46