C# 有没有办法在组合框中直观地划分项目?

C# 有没有办法在组合框中直观地划分项目?,c#,winforms,C#,Winforms,我在想两组人之间的一些界线之类的。有没有办法把这些项目分成几组?为元素着色是一种选择,但它看起来很糟糕。我认为您可以覆盖元素的可视化,但这是一个复杂的解决方案。或者,您可以手动插入行(空心项),并处理选择,以便在选中时还原 我认为没有任何默认解决方案。您可以在组合框中插入分隔符项。您可以使用显示空字符串、破折号等的项。不幸的是,在使用WinForms时,这通常并不容易。如果您使用WPF,您可以更优雅地完成此操作。您可以自己绘制。派生组合,设置DrawMode=OwnerDrawFixed并呈现项

我在想两组人之间的一些界线之类的。有没有办法把这些项目分成几组?为元素着色是一种选择,但它看起来很糟糕。

我认为您可以覆盖元素的可视化,但这是一个复杂的解决方案。或者,您可以手动插入行(空心项),并处理选择,以便在选中时还原


我认为没有任何默认解决方案。

您可以在组合框中插入分隔符项。您可以使用显示空字符串、破折号等的项。不幸的是,在使用WinForms时,这通常并不容易。如果您使用WPF,您可以更优雅地完成此操作。

您可以自己绘制。派生组合,设置
DrawMode=OwnerDrawFixed
并呈现项目:

protected override void OnDrawItem(DrawItemEventArgs e)
{
    e.DrawBackground();
    if( e.State == DrawItemState.Focus )
        e.DrawFocusRectangle();
    var item = this.Items[e.Index];
    using(var brush = new SolidBrush(e.ForeColor))
    {
        e.Graphics.DrawString(item.ToString(), e.Font, brush, e.Bounds);
    }
    e.Graphics.DrawLine(SystemPens.ControlText, e.Bounds.X, e.Bounds.Y, e.Bounds.Right, e.Bounds.Y);

    base.OnDrawItem(e);
}

是的,我希望有某种预先制作的解决方案或功能。你是在下拉列表中的每个项目之间要求一条水平线吗?@JohnArlen是的,可以。这是一种实现分隔符的非常简单的方法。但是,如果用户试图“选择”分隔符项,则还需要添加一些逻辑(例如,重新选择以前的选择)。说到底,这有点麻烦,但如果你对笨重的UI感到满意,它就足够了。