一行中的项目数应该是灵活的。即,我应该能够在运行时根据显示器大小设置它。信息应来自数据库。
我应该使用listview吗?怎么样?
答案 0 :(得分:2)
我会使用TableLayoutPanel自动排列图块。
对于tile,我会创建一个UserControl并在Paint处理程序中绘制我想要的布局。网页搜索可以轻松找到绘制圆角矩形所需的代码,绘制图像和几行文字非常简单。
通过使用UserControl,您可以完全控制它的外观,并且比使用嵌套的PictureBox和Label控件更有效。
一种替代但稍微复杂的解决方案是使用ListView和所有者绘制项目。
答案 1 :(得分:1)
嗯,我说我们来到这里:
该自定义控件具有恒定的宽度 - 高度(请注意,文本数据具有省略号" ..." - 它不会强制项目增长,因此边界是常量)并且包括:
我记得在Winforms中有一些包装面板,它可能是FlowLayoutPanel,但如果你不喜欢它,你应该能够在互联网上找到其他一些实现。这很常见。
我也认为"带圆角的边界"在简单的WinForms中不存在,但你可以轻松编写自己的,见this question。
编辑:如果您不想手动处理FlowPanel中的添加/删除项目,这里是BindableFlowLayout的示例 - 但请务必阅读评论。你必须probalby适应它一点来绘制你的项目控件。实际上,这应该是非常方便的方法。
EDIT2:我不记得强迫ListView显示你的UserControls等的任何其他方式。如果你真的想要ListView,那么你可能需要手动绘制所有项目。 Here's an example of custom-drawn items - 他们在一个示例中绘制了一个平铺的照片列表 - "只是"添加到您的自定义绘图。但实际上这可能不是一件容易的事。
EDIT3:我想补充的最后一件事是你可以在旧版应用中使用WPF 。有特殊的"托管控件"允许您在WPF窗口内的WinForms窗口和WinForms视图中嵌入WPF视图。其中一个是ElementHost
(这是一个WinForms控件),你可以在其中放置一个WPF控件(或整个视图)。唯一的要求是实际的底层Windows版本和已安装的.Net框架必须足够新,才能知道WPF。 Here's a nice tutorial解释了基础知识,并展示了如何在WinForms窗口中放置WPF-y列表。
答案 2 :(得分:0)
我不确定如何给出圆角效果。否则,您可以使用
等属性创建用户控件class userControl:UserControl
{
public string Name{get;set;}
public string Desc{get;set;}
public string Price{get;set;}
}
将这些属性绑定到User Control中的必需标签。 然后根据集合中的no记录创建N个控件,并将它们的属性绑定到它。