【问题标题】:Losing selecteditem when clicking on a empty space in a listbox单击列表框中的空白区域时丢失选定项
【发布时间】:2014-01-09 22:50:22
【问题描述】:

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

它运行良好,但如果我单击列表框中的空白区域,则会取消选择我选择的最后一项。或者当没有选择项目时,它会选择第一个项目。

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

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    试试这个版本的 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);
      }
    }
    

    multisimple listbox. stop whitespace clicking from selecting deselecting last clicked item转换而来

    【讨论】:

    • 感谢您的回复。代码对我来说有点太高级了,上面的解决方案效果很好。您的回答也应该有效我想我已经看到了列表视图的相同解决方案。
    【解决方案2】:

    哇,我完全重现了您所做的事情,而我想出的唯一选择是尝试使您的列表框更小以消除空白。如果框中的列表不是固定大小,您始终可以根据列表大小更改其大小,并在需要滚动之前设置最大大小。

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

    它看起来像这样。

    public Form1(){
                InitializeComponent();
                if (listBox1.Items.Count < 6)
                {
    
                    listBox1.Height = listBox1.Items.Count*12+9;
                }
                else
                {
                    listBox1.Height = 69;
                }
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2020-09-09
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多