自动滚动表布局面板不从顶部开始

时间:2018-08-30 19:49:56

标签: c# winforms

我正在开发一个非常简单的表格布局应用程序,以开始学习C#。我正在以编程方式做所有事情(不是通过设计编辑器)

我正在尝试在应用程序上添加滚动。它似乎工作正常,但默认情况下似乎并没有从水平范围的顶部开始。我尝试添加最大/最小尺寸,自动滚动边距等内容,但似乎没有任何效果。我确信我缺少一些简单的东西。

这是我当前与问题有关的代码。

        layout = new TableLayoutPanel();
        layout.Height = 1075;
        layout.Width = 704;
        layout.Name = "masterLayout";
        layout.Dock = DockStyle.Fill;


        layout.AutoScroll = true;

        int i = 0;
        foreach (Race r in ELECTION_DATA.races.OrderBy(o => o.race_id)) {
            layout.Controls.Add(new Label {  AutoSize = true, Text =r.race_id, Name=r.race_id, Width=300}, i, 0 );
            layout.Controls.Add(new TreeView {  AutoSize = true, Text = r.race_id, Name = r.race_id, Height = 1000, Width = 300 }, i,1);
            i += 1;
        }
        Controls.Add(layout);

这里是图像,标签控件不可见,因为滚动偏移到树形视图的开头。

enter image description here

如何确保滚动始终从最顶部开始?

1 个答案:

答案 0 :(得分:0)

ScrollLayoutPanel具有一个名为ScrollControlIntoView的方法,该方法会将面板内的特定控件移入视图。如果在完成面板填充后仅将第一个控件滚动到视图中,则应确保顶部可见。换句话说:

// do your loop first...
foreach (...)
{
    layout.Controls.Add(...);
}

// then if any controls exist, scroll the first control into view 
if (layout.Controls.Count > 0)
{
    layout.ScrollControlIntoView(layout.Controls[0]);
}