[英]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.