【问题标题】:Change ListBox item spacing更改 ListBox 项目间距
【发布时间】:2013-03-08 18:29:05
【问题描述】:

我有这个界面:

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

我确实试过这个:

lstNames.ItemHeight = 15;

但这并不影响它。注意:我的listbox 是使用数据库动态创建和填充的。

关于如何实现这一点的任何提示?

【问题讨论】:

  • Tacit 您必须将 DrawMode 属性更改为 OwnerDrawFixed 才能使用自定义 ItemHeight。当您使用 DrawMode.OwnerDrawFixed 时,您必须“手动”绘制/绘制项目。
  • @DJ KRAZE 打败了我。我正在输入同样的内容。
  • 对所有数据使用 DataGridView 会更容易。
  • @HardCode 好的,我试试

标签: c# visual-studio-2010 listbox


【解决方案1】:

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

当您使用DrawMode.OwnerDrawFixed 时,您必须使用paint/draw items "manually".

引用自 MaxStackoverflow 发帖 Combobox appearance

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

【讨论】:

  • 我给你举了一个例子,这不是从 Max 引用的
  • 好的,谢谢,它看起来太多了,但我之前就不给了
  • 并不是所有的事情都像一行代码一样简单,有时简单的事情也需要一些工作,默认
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多