0

我有一个包含多个项目的列表框,在每个项目之间有一个空行,例如

item1

item2

item3

(原因是,有几十个项目,IMO 看起来要好得多)。

我想让它让用户不能选择任何空行,我试过了

if (listBox1.SelectedItem.ToString() == "")
            listBox1.SelectedItems.Clear();

在 mouse_Down 事件中,但我得到了这种难看的闪烁效果,当用户选择实际项目并使用箭头键滚动时,上述内容不起作用。

编辑 有没有办法调整列表框项目之间的垂直间距?这就是我需要做的(然后我可以删除空格)

4

1 回答 1

1

您可以使用 ListBox.ItemHeight 属性来定义所有项目的行高。因此,您必须将 DrawMode 设置为 OwnerDrawFixed 或 OwnerDrawVariable 并处理 DrawItem 事件。

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (listBox1.Items.Count > 0)
            {
                if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                    e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
                else
                    e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);

                string text = listBox1.Items[e.Index].ToString();

                e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds.Left, e.Bounds.Top);                
            }
        }
于 2013-04-20T08:50:41.853 回答