添加到具有位置的可滚动面板

时间:2011-03-25 17:14:26

标签: c# .net user-controls panel

嘿伙计们,我使用Panel来保存控件列表(用户自定义)。我添加面板的方式是,在将其添加到面板之前,我将基于Panel.Controls.Count设置控件的位置。

comRec.Location = new Point(comRec.Location.X, panel1.Controls.Count * 25);
panel1.Controls.Add(comRec);

现在,这很好用,看起来就像我想要的那样。但是,一旦我们达到窗口限制,AutoScroll启用(我想要的)。现在,如果用户要滚动到Panel的底部,这最终会更改面板中每个控件的位置。而不是我的第一个comRec.Location(0,0),它类似于(0,-219)。所以现在,当用户添加另一个comRec对象时,它会在对象之间创建一个巨大的间隙。

我的问题是,使用滚动条考虑位置变化并使用我的添加系统的最佳方法是什么。我假设必须检查滚动条的值并使用它来确定位置。

此外,是否有更好的方式来显示控件列表?我应该使用Panel吗?

3 个答案:

答案 0 :(得分:5)

看看FlowLayoutPanel控件,它正是你的意思。

答案 1 :(得分:1)

您可以在层次结构中添加其他面板:

Outer panel (scrollable)
    Inner panel (not scrollable, resize it whenever you add a control)
        User Defined Control 1
        User Defined Control 2
        User Defined Control 3
        User Defined Control 4
        ...

这样,您的附加控件位置将相对于其直接父级,即非滚动面板。

答案 2 :(得分:1)

如果添加多个控件,请在添加控件时尝试暂停面板的布局:

panel1.SuspendLayout();
// Add controls ...
panel1.ResumeLayout();

这有助于我在类似的情况下,用户可以动态更改现有控件的可见性。