C# 单击列表框中的空白区域时丢失selecteditem

C# 单击列表框中的空白区域时丢失selecteditem,c#,winforms,listbox,C#,Winforms,Listbox,我想问你一件事,我有一个包含多个项目的列表框。 列表框设置为MultiSimple as SelectionMode。所以我可以选择多个项目 它工作得很好,但是如果我在我的列表框中点击一个空白区域,它会导致取消选择我选择的最后一个项目。或者,如果未选择任何项目,则选择第一个项目 当我单击空白区域时,如何防止列表框选择/取消选择项目? (对于空白,我指的是我的项目下方的空白。)哇,我完全重新创建了您所做的,我想到的唯一选择是尝试将您的列表框缩小,以消除空白。如果框中的列表不是固定大小,您可以随时根

我想问你一件事,我有一个包含多个项目的列表框。 列表框设置为MultiSimple as SelectionMode。所以我可以选择多个项目

它工作得很好,但是如果我在我的列表框中点击一个空白区域,它会导致取消选择我选择的最后一个项目。或者,如果未选择任何项目,则选择第一个项目

当我单击空白区域时,如何防止列表框选择/取消选择项目?
(对于空白,我指的是我的项目下方的空白。)

哇,我完全重新创建了您所做的,我想到的唯一选择是尝试将您的列表框缩小,以消除空白。如果框中的列表不是固定大小,您可以随时根据列表大小更改其大小,并在需要滚动之前设置最大大小

这不是最好的解决方案,但似乎有效

它看起来像这样

public Form1(){
            InitializeComponent();
            if (listBox1.Items.Count < 6)
            {

                listBox1.Height = listBox1.Items.Count*12+9;
            }
            else
            {
                listBox1.Height = 69;
            }

        }
public Form1(){
初始化组件();
如果(列表框1.Items.Count<6)
{
listBox1.Height=listBox1.Items.Count*12+9;
}
其他的
{
listBox1.高度=69;
}
}

尝试此版本的ListBox控件:

public class ListEx : ListBox {
  private const int WM_LBUTTONDOWN = 0x201;
  protected override void WndProc(ref System.Windows.Forms.Message m) {
    if (m.Msg == WM_LBUTTONDOWN) {
      Point pt = new Point(m.LParam.ToInt32());
      if (this.IndexFromPoint(pt) == -1) {
        return;
      }
    }
    base.WndProc(ref m);
  }
}

转换自

谢谢您的回复。代码对我来说有点太高级了,上面的soloution非常有效。你的答案也应该有效,我想我已经看到了ListView的类似解决方案。