【问题标题】:How do I allow the user to multi-check with the CheckedListBox through the 'shift' key?如何允许用户通过“shift”键对 CheckedListBox 进行多重检查?
【发布时间】:2010-09-30 18:06:01
【问题描述】:

假设我有一个 CheckedListBox,其中依次包含项目“1”、“2”、“3”、“4”和“5”,我想选择“2”、“3”和“4” " 通过选择“2”然后按住 shift 并选择“4”。是否有任何内置方法可以使用 CheckedListBox 控件实现此目的?我找到了一篇关于如何使用 SelectedIndexChanged 事件来接近这种行为的文章,但是虽然它检查了多个项目,但它并没有将它们显示为选中状态。

http://www.windowsdevelop.com/windows-forms-general/multiple-selection-checkbox-53049.shtml

如果有我可以使用的替代控件,那么我也愿意。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    可能有更简单的替代方法,但您可以使用ListView,将CheckBoxes 设置为true,将HeaderStyle 设置为None,并将View 设置为List

    更正:

    应该已将View 设置为Details

    【讨论】:

    • 在我的实际场景中,我有一个很大的文件名列表,这些文件名将成为数据。如果我使用 ListView,如何将其设置为只能垂直滚动且只有一列项目?
    • 现在想多了,一个ListBox大概就是我需要的吧。没有理由有复选框。他们只需要从列表中选择一些文件。不过感谢您的帮助。您的答案适用于我最初问题的测试场景。
    • 对不起,我的错误。您想将View 设置为Details。假设只有一列,还可以设置 Column 的宽度以允许垂直滚动条,使用 System.Windows.Forms.SystemInformation.VerticalScrollBarWidth 获取滚动条宽度。
    • 很好的解决方案!起初,当我将View 切换到Details 时,ListView 保持空白,但只要我在Columns 属性中添加一列,它就可以正常工作
    【解决方案2】:

    不支持多选,但我通过搜索找到了 CheckedItems。

    选中项是指被标记的项,选中项是指被选中的项。

    因此,如果您想要带有选中复选框的项目,请使用 .CheckedItems 属性而不是 .SelectedItems。

    【讨论】:

      【解决方案3】:

      对于我今天想出的多重检查:

          List<int> listBox2_selectionhistory = new List<int>();
      
          private void checkedListBox2_SelectedIndexChanged(object sender, EventArgs e)
          {
              int actualcount = listBox2_selectionhistory.Count;
              if (actualcount == 1)
              {
                  if (Control.ModifierKeys == Keys.Shift)
                  {
                      int lastindex = listBox2_selectionhistory[0];
                      int currentindex = checkedListBox2.SelectedIndex;
                      int upper = Math.Max(lastindex, currentindex) ;
                      int lower = Math.Min(lastindex, currentindex);
                      for (int i = lower; i < upper; i++)
                      {
                          checkedListBox2.SetItemCheckState(i, CheckState.Checked);
                      }
                  }
                  listBox2_selectionhistory.Clear();
                  listBox2_selectionhistory.Add(checkedListBox2.SelectedIndex);
              }
              else
              {
                  listBox2_selectionhistory.Clear();
                  listBox2_selectionhistory.Add(checkedListBox2.SelectedIndex);
              }
          }
      

      据我所知,checkedlistboxes 的 SelectionMode 只能是一个或无,这意味着您不能让应用一次选择超过 1 个(我也使用此行为来简化我的 checklistboxes 代码)

      【讨论】:

        【解决方案4】:

        CheckedListBox 控件似乎不支持多选(请参阅MSDN)。它确实支持选中多个复选框,但不支持一次选择(突出显示)多个项目。

        我同意另一个答案,即ListView 可能是同时获得复选框和多项选择的最佳方式。

        【讨论】:

          【解决方案5】:

          似乎无法设置见CheckedListBox.SelectionMode Property中的备注部分

          如需更简单的选择,请遵循 adrift 的建议。

          【讨论】:

            【解决方案6】:

             private System.Windows.Forms.CheckedListBox LBO1;
            
             string mySentLst = string.Join(";", LBO1.CheckedItems.Cast<string>());
            

            【讨论】:

            • 这个 7 年前的问题是关于“选择”多个项目的。
            • 这很明显。但是,没有一个答案是完整的。除非您将它们 Cast(ed) 转换为类型,否则多个选定的 CheckedItem 是无用的!希望对您有所帮助。
            【解决方案7】:

            请按以下步骤操作:

            • 选择CheckOnClick = true。

            • 当您要检索选定的项目时,请改用GetItemChecked(int index) 方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-26
              相关资源
              最近更新 更多