首页 文章

包含自定义控件的WinForms列表框?

提问于
浏览
4

是否可以制作列出一堆自定义控件的列表框?我假设你可能不得不调用某种子对象的自定义绘图,但我不知道该怎么做 . 任何人都可以对此有所了解吗?

5 回答

  • 2

    ListBox不是设计为容器控件 . 其滚动条无法滚动控件 . 这通常是你想要避免的东西,比如在一个Panel中放置很多控件,其AutoScroll属性为True将使你的UI无响应 . 控制是昂贵的对象 .

    看看ListBox.DrawItem事件 . 您可以使用Graphics类方法绘制自己的项目并使其看起来像您想要的那样 . 它非常便宜 . 事件的MSDN Library article有一个非常好的例子 .

  • 6

    我之前没有使用FlowLayoutPanel,而只是一个普通的面板,控件停靠在顶部 . 您可以添加滚动条等 .

    这对于一些控件非常有效 . 不止一些,它开始真正放慢速度 . 如果你有时间,我会考虑在它的位置画一个假控件,比如Hans Passant's answer,然后当用户点击其中一个项目时,用一个看起来完全相同的真实控件替换它 . 当该项目失去焦点时,请将其丢弃并更改基础列表 .

  • 0

    也许这就是你要找的东西:Flexible List Control

    我在一段时间后写了那篇文章 .

  • 0

    使用WPF非常简单,只需使用基本组合即可 . 在WinForms世界中,您可能需要使容器成为自定义控件 .

  • 1
    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);
            }
        }
    

相关问题