如何从C#中的checkBoxList访问项目文本?

时间:2017-09-30 11:13:58

标签: c#

我有以下代码:

    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。 来自这些位置的数据就像另一个,它是可见的,并没有什么特别之处。 任何建议表示赞赏!

1 个答案:

答案 0 :(得分:2)

我认为您收到此错误,因为当您检查位置0和33上的元素时,方法".exe"不会返回包含字符".exe"的字符串。该算法尝试拆分您的字符串。如果找不到.split()中的任何checkedProcessElements[1].Trim();将返回一个数组,其中只有一个元素位于零位置。在这种情况下,新的分割数组是旧的未分裂字符串。)

edittext.setFocusable(false); edittext.setClickable(true); 尝试读取数组范围之外的值,因为其长度仅为1。