是否可以制作列出一堆自定义控件的列表框?我假设你可能不得不调用某种子对象的自定义绘图,但我不知道该怎么做。任何人都可以对此有所了解吗?
答案 0 :(得分:6)
ListBox不是设计为容器控件。其滚动条无法滚动控件。这通常是你想要避免的东西,比如在一个Panel中放置很多控件,其AutoScroll属性为True将使你的UI无响应。控制是昂贵的对象。
看一下ListBox.DrawItem事件。您可以使用Graphics类方法绘制自己的项目并使其看起来像您想要的那样。它非常便宜。事件的MSDN Library article有一个很好的例子。
答案 1 :(得分:2)
我之前没有使用FlowLayoutPanel,而只是一个普通的Panel控件停靠在顶部。您可以添加滚动条等。
这对于一些控件非常有效。不止一些,它开始真正放慢速度。如果你有时间,我会考虑在它的位置绘制一个假控件,就像在Hans Passant's answer中一样,然后当用户点击其中一个项目时,用一个看起来完全相同的真实控件替换它。当该项目失去焦点时,请将其丢弃并更改基础列表。
答案 2 :(得分:1)
也许这就是你要找的东西: Flexible List Control
我在一段时间后写了这篇文章。
答案 3 :(得分:0)
使用WPF非常简单,只需使用基本组合。在WinForms世界中,您可能需要将容器设置为自定义控件。
答案 4 :(得分:0)
private void OnDrawItem(object sender, DrawItemEventArgs e)
{
Rectangle rect = e.Bounds;
rect.Offset(0, -rect.Top);
using (Bitmap bitmap = new Bitmap(rect.Width, rect.Height))
{
Control control = (Control)listBox.Items[e.Index];
control.DrawToBitmap(bitmap, rect);
rect = e.Bounds;
e.Graphics.DrawImage(bitmap, e.Bounds);
}
}