Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加到具有位置的可滚动面板_C#_.net_User Controls_Panel - Fatal编程技术网

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

C# 添加到具有位置的可滚动面板,c#,.net,user-controls,panel,C#,.net,User Controls,Panel,我使用面板保存控件列表(用户定义)。添加面板的方式是,在将控件添加到面板之前,根据Panel.Controls.Count设置控件的位置 comRec.Location = new Point(comRec.Location.X, panel1.Controls.Count * 25); panel1.Controls.Add(comRec); 现在,它工作得很好,看起来正是我想要的。但是,一旦我们达到窗口的限制,就会启用AutoScroll(这是我想要的)。现在,如果用户要滚动到面板的底部,

我使用
面板
保存控件列表(用户定义)。添加面板的方式是,在将控件添加到面板之前,根据
Panel.Controls.Count
设置控件的位置

comRec.Location = new Point(comRec.Location.X, panel1.Controls.Count * 25);
panel1.Controls.Add(comRec);
现在,它工作得很好,看起来正是我想要的。但是,一旦我们达到窗口的限制,就会启用
AutoScroll
(这是我想要的)。现在,如果用户要滚动到
面板的底部
,这最终会更改面板中每个控件的位置。我的第一个
comRec.Location
不是(0,0),而是(0,-219)。所以现在,当用户添加另一个
comRec
对象时,会在对象之间产生巨大的间隙

我的问题是,使用滚动条和我的添加系统解释位置变化的最佳方式是什么。我假设这需要检查滚动条的值并使用它来确定位置


另外,是否有更好的方法显示控件列表?我是否应该使用
面板

查看控件,它正是您想要的。

您可以在层次结构中添加一个额外的面板:

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
        ...

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

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

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

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

这看起来很管用!但是,FlowDirection属性有点混乱。打开AutoScroll时,您需要使用LeftToRight而不是TopDown来创建垂直滚动面板。这可能也值得一看。因为我已经制作了一个usercontrol,它在内部处理所有值,我喜欢FlowLayoutPanel更适合我的情况,但感谢您的替代方案。在未来的开发过程中,我会记住这两个方面。@Kyle:是的,有时候会有点困惑(也许很奇怪!),但当你知道如何使用它时,它就像一个符咒一样有效:)嗯,我确定它的意思是:自上而下意味着当它触底时,它会向右移动,导致它水平滚动。LeftToRight将在右侧添加,直到它碰到面板的边缘,然后移动到底部,使其垂直滚动。由于面板的宽度仅足以容纳我的一个控件,因此它工作得非常完美。感谢您的回答,这确实有效,但是FlowLayoutPanel比仅使用面板做得更干净、更好。