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

Posted

技术标签:

【中文标题】Windows 窗体和 C# 中的动态自上而下的控件列表?【英文标题】:Dynamic top down list of controls in WindowsForms and C#? 【发布时间】:2010-09-06 20:39:05 【问题描述】:

在我们的项目SharpWired 中,我们正在尝试创建一个类似于 Firefox 或 Safari 中的下载窗口的下载组件。也就是说,一个自上而下的下载列表,它是包含进度条、按钮等的自定义控件。

要求应该是一个列表,每行一个元素。每个元素都必须是自定义控件。整个列表应该是动态调整大小的,这样当你让它变长/变短时,列表会在需要时添加一个滚动条,当你使它变细/变宽时,自定义控件应该调整到列表的宽度。

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

这一定是一个很常见的用例,我觉得FlowLayoutPanel 没有直观的方法来做这件事有点奇怪。 有没有人做过类似的事情或有提示或技巧让我们继续前进?

干杯! /亚当

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这就是我们一直在做的事情。数据绑定解决方案对我们来说开销太大。【参考方案2】:

.NET 3.5 SP1 引入了一个DataRepeater Windows 窗体控件,听起来它会做你想做的事。将其绑定到“下载”列表(或您的列表所代表的任何内容)并自定义每个项目面板以包含您需要的控件。

【讨论】:

该控件位于 VisualBasic Power Pack 中。我将如何在 C# 中使用它? @Adam 不,它只是在 VisualBasic 命名空间中。您可以从任何和所有 .NET 语言中使用它,它是 .NET 3.5 SP1 框架的一部分。 据我所知,您可以简单地在解决方案中引用程序集,并正常使用其中的方法。编译后的 .Net 程序集可以无缝地相互操作。当然,我对这个大会没有具体的经验,我不能保证我刚才在这个例子中所说的任何事情。 :)

以上是关于Windows 窗体和 C# 中的动态自上而下的控件列表?的主要内容,如果未能解决你的问题,请参考以下文章

c# windows 窗体 如何 设置菜单的权限

什么是最佳选择,Windows 窗体或 C# 中的 WPF 开发?

C# Windows 窗体中的 WMP 在显示 GIF 后停止播放声音

从 C# 中的外部 DLL 访问 windows 窗体控件

如何通过在 C# windows 窗体中的文本框中输入来更改图像的大小?

c# windows窗体中的文本框