2012-04-26 33 views
2

我正在考虑组之间的某种线条或什么。有没有办法将项目分成组?着色他们是一种选择,但它会看起来很糟糕。有没有什么方法可视化地分割组合框中的项目?

+0

我看到那里有人掉下来的表,而不是一个名单,但有大量定制,这是有点笨重。有这样的解决方案,但他们当然要花钱,比如[Telerik的多列组合框](http://www.telerik.com/products/winforms/multicolumncombo.aspx)。 – 2012-04-26 14:51:58

+0

你是否要求在下拉菜单中的每个项目之间的水平线? – 2012-04-26 18:03:38

+0

@JohnArlen 是的,那可以。 – Alternatex 2012-05-06 19:08:00

回答

0

我认为你可以重载元素的可视化,但这是一个复杂的解决方案。或者您可以手动插入线条(空心项目),然后处理所选内容,如果选中它们即可恢复。

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

+0

是的,我希望有某种预先制定的解决方案或功能。 – Alternatex 2012-04-26 14:48:26

0

您可以在组合框中插入分隔条。您可以使用显示空字符串,短划线等的项目。不幸的是,使用WinForms时,这通常不容易。如果你使用WPF,你可以更优雅地做到这一点。

+1

这是实现分隔符的非常简单的方法。但是,如果用户尝试“选择”分隔项目,则还需要添加一些逻辑(例如重新选择先前的选择)。最终它有点混乱,但如果你对笨重的UI满意就足够了。 – 2012-04-26 19:02:34

2

所有者绘制自己的图很简单。派生组合,设置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); 
} 
相关问题