WindowsForms和C#中控件的动态自上而下列表?

时间:2020-03-05 18:43:12  来源:igfitidea点击:

在我们的SharpWired项目中,我们试图创建一个类似于Firefox或者Safari中下载窗口的下载组件。也就是说,一个单独的自上而下的下载列表是自定义控件,其中包含进度条,按钮以及其他内容。

要求是应该有一个单独的列表,每一行上都有一个元素。每个元素必须是一个自定义控件。整个列表应可动态调整大小,以便当我们将列表变长/变短时,在需要时添加滚动条;当我们变薄/变宽时,自定义控件的大小应调整为列表的宽度。

我们已经尝试使用FlowLayoutPanel,但是没有调整大小以按照我们想要的方式工作。最好只将自定义控件的锚点设置为"左"和"右"。我们还考虑过使用TableLayoutPanel,但是到目前为止,动态添加行的开销太大。

这一定是一个很普遍的用例,对我来说,FlowLayoutPanel没有直观的方法似乎有点奇怪。有没有人做过类似的事情或者有技巧或者窍门让我们前进?

干杯!
/亚当

解决方案

回答

.NET 3.5 SP1引入了DataRepeater Windows窗体控件,这听起来像它可以完成我们想要的。将其绑定到"下载"列表(或者列表所代表的名称),并自定义每个项目面板以包括所需的控件。

回答

如果我们不想使用数据绑定(如上所述,通过DataRepeater控件),则可以使用常规的Panel控件并将其AutoScroll属性设置为true(以启用滚动条)。

然后,我们可以手动添加自定义控件,并将每个控件的Dock属性设置为Top。