C# 更改列表框项目间距

C# 更改列表框项目间距,c#,visual-studio-2010,listbox,C#,Visual Studio 2010,Listbox,我有这个界面: 我要做的是将列表框左侧的名称与右侧的网格对齐或隔开,以便每个名称与每个网格行内联 我确实试过: lstNames.ItemHeight = 15; 但这并不影响它。注意:My列表框是动态创建的,并使用数据库填充 有关如何实现此目的的任何提示?您必须将DrawMode属性更改为OwnerDrawFixed才能使用自定义ItemHeight 当您使用DrawMode.OwnerDrawFixed时,您必须手动绘制/绘制项目。 引用自此Stackoverflow过帐的Max 公共类

我有这个界面:

我要做的是将
列表框
左侧的名称与右侧的网格对齐或隔开,以便每个名称与每个网格行内联

我确实试过:

lstNames.ItemHeight = 15;
但这并不影响它。注意:My
列表框是动态创建的,并使用数据库填充


有关如何实现此目的的任何提示?

您必须将
DrawMode
属性更改为
OwnerDrawFixed
才能使用自定义
ItemHeight

当您使用
DrawMode.OwnerDrawFixed
时,您必须手动
绘制/绘制项目。

引用自此
Stackoverflow
过帐的
Max

公共类ComboBox:ComboBox
{
公共ComboBoxEx()
{
base.DropDownStyle=ComboBoxStyle.DropDownList;
base.DrawMode=DrawMode.OwnerDrawFixed;
}
受保护的覆盖无效OnDrawItem(DrawItemEventArgs e)
{
e、 牵引杆接地();
if(e.State==DrawItemState.Focus)
e、 DrawFocusRectangle();
var指数=e.指数;
if(index<0 | | index>=Items.Count)返回;
var项目=项目[索引];
字符串text=(item==null)?“(null)”:item.ToString();
使用(var笔刷=新的SolidBrush(例如前景色))
{
e、 Graphics.TextRenderingHint=System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
e、 图形.抽绳(文本,如字体,画笔,如边框);
}
}
}

Tacit
必须将DrawMode属性更改为OwnerDrawFixed才能使用自定义ItemHeight。当你使用DrawMode.OwnerDrawFixed时,你必须“手动”绘制物品。@DJ KRAZE击败了我。我输入了同样的内容。对所有数据使用DataGridView会更容易。@HardCode好的,我会尝试我给了你一个例子,不是说这是从Max引用的,我可以添加链接,但是代码示例会更容易让你看到,而不是导航到多个链接。谢谢,看起来太多了,但我会给出它实际上,编码中的所有事情都像一行代码一样简单,有时简单的事情也需要一些工作
public class ComboBoxEx : ComboBox
{
    public ComboBoxEx()
    {
        base.DropDownStyle = ComboBoxStyle.DropDownList;
        base.DrawMode = DrawMode.OwnerDrawFixed;
    }

    protected override void OnDrawItem(DrawItemEventArgs e)
    {
        e.DrawBackground();
        if(e.State == DrawItemState.Focus)
            e.DrawFocusRectangle();
        var index = e.Index;
        if(index < 0 || index >= Items.Count) return;
        var item = Items[index];
        string text = (item == null)?"(null)":item.ToString();
        using(var brush = new SolidBrush(e.ForeColor))
        {
            e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            e.Graphics.DrawString(text, e.Font, brush, e.Bounds);
        }
    }
}