是否有可能使一个列表框列出一堆自定义控件?我假设你可能不得不调用某种自定义的子对象绘图,但我不知道该怎么做。任何人都可以对此有所了解吗?包含自定义控件的WinForms列表框?
回答
ListBox的设计不是一个容器控件。它的滚动条不能滚动控件。一般来说,你想要避免的是,在AutoScroll属性为True的面板中放置很多控件会使你的UI无响应。控件是昂贵的对象。
看看ListBox.DrawItem事件。您可以绘制自己的项目,并使其看起来与Graphics类方法一样。而且非常便宜。该活动的MSDN Library article中有一个很好的例子。
这对于WPF来说非常简单,只需使用基本构图即可。在WinForms世界中,您可能需要将容器作为自定义控件。
我从来没有真正使用过WPF,所以我会坚持使用WinForms。所以容器和物品必须是自定义控件。 – MarkP 2010-07-14 17:11:10
容器将是,项目可能不必。据推测,你的自定义容器将包含一个'Control'对象的集合。 – 2010-07-14 17:16:53
我已经完成了这之前不使用FlowLayoutPanel,但只是一个普通的面板与控制停靠在顶部。你可以添加一个滚动条等。
这对于一些控件很适用。不止一些,它开始真的放慢速度。如果你有时间的话,我会考虑在它的位置绘制一个假控件,如Hans Passant's answer,然后当用户点击其中一个项目时,用一个看起来完全一样的真实控件替换它。当该物品失去焦点时,处置它并更改底层列表。
你偷了我的评论,并把它变成一个答案...辉煌! – Luiscencio 2010-07-14 18:45:13
@Luiscencio - 实际上,这更多的是回应你的评论。注意我说我*没有*使用FlowLayoutPanel,而是一个简单的Panel。原因是如果你想模拟一个列表框,它们都是垂直排列的,而不是在FlowLayoutPanel的“流”布局中。 (此外,如果你想让你的评论成为一个答案,你应该已经发布了它作为答案。) – dlras2 2010-07-14 18:49:16
我仍然爱你 – Luiscencio 2010-07-14 18:55:32
也许这是你在找什么: Flexible List Control
我写的文章有一段时间了。
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);
}
}
- 1. 包含其他控件的自定义列表框
- 2. winforms的自定义组合框控件
- 3. .NET winforms自定义控件包选项
- 4. 如何创建包含填充列表的自定义控件?
- 5. 自定义Wpf列表框控件
- 6. 细化自定义列表框控件
- 7. ListView包含在自定义控件中
- 8. 结合包含自定义控件
- 9. 自定义控件列表的WinForms UI设计建议?
- 10. 自定义控件列表
- 11. 自定义列表控件
- 12. Winforms中的自定义控件库
- 13. WPF:包含控件与继承控件的自定义UserControl
- 14. 具有System.Windows.Forms和自定义基类的自定义WinForms控件
- 15. WinForms和处置自定义控件
- 16. C#Winforms自定义WebBrowser控件需要
- 17. C#Winforms自定义控件帮助
- 18. WinForms自定义控件颜色
- 19. Winforms用户控制自定义事件
- 20. 围绕winforms自定义控件减少选择框的大小
- 21. 如何在.Net上绘制自定义边框WinForms控件
- 22. 用VS2010中的自定义控件代替几个winforms控件
- 23. 自定义控件防止标准控件出现在的WinForms
- 24. ListView绑定到包含词典的自定义类的列表
- 25. 基于列表框的自定义wpf控件
- 26. 列表框选定值(winforms)
- 27. Winforms绑定到列表框
- 28. '列表'不包含'Where'的定义
- 29. 自定义列表框WP7
- 30. SQLAlchemy自定义类型包含多列
您是使用Winforms,WPF还是其他? – 2010-07-14 16:47:59
要做这样的事情,我添加一个* FlowLayoutPanel *,然后以一些奇特的方式添加我的控件。 – Luiscencio 2010-07-14 17:13:07
Just WinForms ... – MarkP 2010-07-14 17:15:28