我有以下代码:
string checkedItemListBoxPName;
string checkedItemListBoxPID;
int selectedProcessIndex;
private void processes_checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
for (int j = 0; j < processes_checkedListBox.Items.Count; ++j)
{
if (e.Index != j)
{
processes_checkedListBox.SetItemChecked(j, false);
}
}
selectedProcessIndex = processes_checkedListBox.SelectedIndex;
MessageBox.Show(selectedProcessIndex.ToString());
string checkedProcess = processes_checkedListBox.Items[selectedProcessIndex].ToString();
string[] checkedProcessElements = checkedProcess.Split(new string[] { ".exe" }, StringSplitOptions.None);
checkedItemListBoxPName = checkedProcessElements[0];
checkedItemListBoxPID = checkedProcessElements[1].Trim();
MessageBox.Show(checkedProcessElements[0].ToString());
MessageBox.Show(checkedItemListBoxPID.ToString());
}
}
当我从checkBoxList中选中一个复选框时,会调用此方法。在开始时,我取消选中所有其他以前的复选框,这样我将只检查一个。
在selectedProcessIndex
中,我存储了复选框的索引,以便在string checkedProcess = processes_checkedListBox.Items[selectedProcessIndex].ToString();
之后我可以访问其文本一段时间。
除了检查第一个方框(索引= 0)或第33个方框时,我收到System.IndexOutOfRangeException: Index was outside the bounds of the array.
我不知道这些具体职位的情况。为什么0和33无法处理。 正如我所说,我总共有35个复选框,从0到34。 来自这些位置的数据就像另一个,它是可见的,并没有什么特别之处。 任何建议表示赞赏!
答案 0 :(得分:2)
我认为您收到此错误,因为当您检查位置0和33上的元素时,方法".exe"
不会返回包含字符".exe"
的字符串。该算法尝试拆分您的字符串。如果找不到.split()
中的任何checkedProcessElements[1].Trim();
将返回一个数组,其中只有一个元素位于零位置。在这种情况下,新的分割数组是旧的未分裂字符串。)
edittext.setFocusable(false);
edittext.setClickable(true);
尝试读取数组范围之外的值,因为其长度仅为1。