0
    namespace explorer
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                DirectoryInfo di = new DirectoryInfo("c:\\test");
                FileSystemInfo[] files = di.GetFileSystemInfos();
                checkedListBox1.Items.AddRange(files);
            }

            private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
            {
                for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix)
                if (ix != e.Index) checkedListBox1.SetItemChecked(ix, false); 
            }
            //removed irrelevant parts of the code
        }
    }

我忘记了如何为选中列表框构建事件处理程序。我需要选择一个。我有多个文件,但我只需要通过复选框选择一个。

4

2 回答 2

2

您需要关闭事件处理程序或使用变量作为标志以避免堆栈溢出,因为您正在取消选中 ItemCheck 事件中的项目:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
  checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck;
  for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) {
    if (ix != e.Index) {
      checkedListBox1.SetItemChecked(ix, false);
    }
  }
  checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
}

使用变量的示例:

bool checkFlag = false;

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
  if (!checkFlag) {
    checkFlag = true;
    for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) {
      if (ix != e.Index) {
        checkedListBox1.SetItemChecked(ix, false);
      }
    }
    checkFlag = false;
  }
}
于 2012-10-11T14:38:08.970 回答
1

您可以创建List<FileSystemInfo>集合并在选中时将每个选中的文件添加到其中,并在取消选中时删除。如我所见,处理程序本身已经创建(checkedListBox1_ItemCheck)。可能你应该考虑把问题写得更清楚,因为我可能理解你不完全正确?

于 2012-10-11T14:32:47.773 回答