【问题标题】:Strange AutoScroll behavior奇怪的自动滚动行为
【发布时间】:2012-02-27 11:19:58
【问题描述】:

简介

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

该控件包含一个 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 等于TopDown,所以控件的高度将增加。

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

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

private void MainForm_Layout(object sender, LayoutEventArgs e)
{
    uxSection.Width = this.ClientSize.Width;
}

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

问题

这是我正在做的事情:

第 0 步。运行程序。

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

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

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

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

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

【问题讨论】:

  • 为什么滚动条看起来像是在窗体上而不是在 UserControl 上? FlowLayoutPanel 中的按钮也是?标签无法获得焦点,但您的按钮可以,这就是它滚动回视图的原因。 WinForms 正在尝试帮助用户在屏幕上显示活动控件。
  • @LarsTech:谢谢你的提示。经过一些谷歌搜索后,我在这里找到了一种解决方法:nickstips.wordpress.com/2010/03/03/…

标签: c# .net winforms


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多