禁用在列表框中选择空行

本文关键字:选择 列表 | 更新日期: 2023-09-27 18:10:08

我有一个listBox,里面有几个项目,每个项目之间有一个空白行,例如

item1
item2
item3

(原因是,在我看来,有几十个项目看起来好多了)。

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

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

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

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

禁用在列表框中选择空行

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

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