Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# 在Windows.Forms中创建控件列表_C#_Winforms - Fatal编程技术网

C# 在Windows.Forms中创建控件列表

C# 在Windows.Forms中创建控件列表,c#,winforms,C#,Winforms,我已经决定,我希望有一个具有复杂上下文的列表,即自定义控件的列表。目标是看起来像好友列表的东西,带有照片、状态图标、文本和开始聊天按钮 但我喜欢它表现为一个列表:滚动条,可以选择多个项目,等等 当我查看ListView和ListBox时,我只看到我可以添加文本和图标,但不能添加任意控件。我想知道这是怎么做到的 或者我应该使用ListView/ListBox以外的东西吗?Visual Basic电源包中有一个名为的控件 这允许您将自己的控件与成为中继器中项目的数据容器相关联 我以前用过一次,我相信

我已经决定,我希望有一个具有复杂上下文的列表,即自定义控件的列表。目标是看起来像好友列表的东西,带有照片、状态图标、文本和开始聊天按钮

但我喜欢它表现为一个列表:滚动条,可以选择多个项目,等等

当我查看ListView和ListBox时,我只看到我可以添加文本和图标,但不能添加任意控件。我想知道这是怎么做到的


或者我应该使用ListView/ListBox以外的东西吗?

Visual Basic电源包中有一个名为的控件

这允许您将自己的控件与成为中继器中项目的数据容器相关联

我以前用过一次,我相信它不完全是直观的,但一旦你有了头脑,它就会相当有用。它还节省了您自己的控制


这是目前为止我发现的最接近于在Windows窗体中创建任意重复控件的想法。

在Windows窗体中创建此控件非常简单,而在Windows窗体中需要大量工作—WPF旨在创建如此丰富的UI控件。如果应用程序的其余部分是Windows窗体,则您可以使用FlowLayoutPanel作为主机。

使用FlowLayoutPanel。如果希望控件垂直排列并滚动,请执行以下操作:

myFlowLayoutPanel.AutoScroll = true;
myFlowLayoutPanel.FlowDirection = FlowDirection.TopDown;
myFlowLayoutPanel.WrapContents = false; // Vertical rather than horizontal scrolling
foreach(Control myControl in myControls){
    myFlowLayoutPanel.Controls.Add(myControl);
}

确保面板足够大,可以容纳控件和滚动条。我不确定您的选择要求。

为什么不试试WPF而不是Winforms?@Dean Chalk:我正在向现有应用程序添加一项功能。更不用说,如果你还没有任何WPF方面的经验,那么尝试WPF将导致一个陡峭的学习曲线。至少学习WPF的基础知识只会让C开发人员在将来受益,因为微软将大量精力放在它上面。此外,OP试图做的只是简单地使用XAML和数据绑定,这在所有WPF教程的第一章中都有介绍。@CommanderZ假设OP想要实现的就是本文中所写的内容。在WinForms中,这也很简单,在VisualBasic电源包中有一个可用于执行此操作的控件,称为Data Repeater。然而,我同意WinForms从无到有并不是一件小事。并非所有事情都是XY问题。有时OP需要使用一个系统而不是另一个系统是有原因的。