繁体   English   中英

如何检查checkedlistbox c# winforms中的范围?

[英]How to check range in checkedlistbox c# winforms?

我有一个包含 100 个项目的复选框列表。 显然,用户可以根据需要逐一检查项目,但我想给用户选项检查项目的范围(假设使用 Shift 按住按钮)。 因此,用户检查其中一个项目(比如说项目索引 5),然后按住 shift 按钮并检查下一个项目(索引 10),所以我应该从 5...10 检查项目的范围

我还没有找到任何关于这种实现的东西,看起来它不存在,也没有人做过这种事情。

怎么做?

跟踪您的最后一个索引:

int lastIndex = -1;

在表单的构造函数中,连接起来:

public Form1() {
  InitializeComponent();

  checkedListBox1.CheckOnClick = true;
  checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
  checkedListBox1.MouseDown += CheckedListBox1_MouseDown;
}

然后使用这些方法更改范围内的项目:

private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
  lastIndex = checkedListBox1.SelectedIndex;
}

private void CheckedListBox1_MouseDown(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Left && Control.ModifierKeys == Keys.Shift) {
    var useIndex = Math.Max(lastIndex, 0);
    var x = checkedListBox1.IndexFromPoint(e.Location);
    if (x > -1 && x != useIndex) {
      if (useIndex > x) {
        for (int i = useIndex - 1; i > x; i--) {
          checkedListBox1.SetItemChecked(i, !checkedListBox1.GetItemChecked(i));
        }
      } else {
        for (int i = useIndex + 1; i < x; i++) {
          checkedListBox1.SetItemChecked(i, !checkedListBox1.GetItemChecked(i));
        }
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM