CheckedListBox里的项是从DataGridView里读取的标题列,我现在想点击选中CheckedListBox里某个项,就去执行选中的这个项所对应的相关操作,
取消选中后再执行对应的相关操作。请问如何实现?
private int idx;  //当前选中项的序号private void clb_ItemCheck(object sender, ItemCheckEventArgs e)
{
idx = e.Index; //当前的选中项序号
}private void clb_SelectedIndexChanged(object sender, EventArgs e)
{
string[] x = new string[MyDataGrid.RowCount];
double[] y = new double[MyDataGrid.RowCount]; for (int j = 0; j < MyDataGrid.RowCount; j++)
{
// 取DataGridView里第一列的时间放入一个string数组里
x[j] = MyDataGrid.Rows[j].Cells[0].Value.ToString();
// 取相应的选中的第idx列放入数组
y[j] = Convert.ToDouble(MyDataGrid.Rows[j].Cells[idx].Value);
} // Do SomeThing...
}
点击选中后没问题,后面执行正常。如果是取消选中,如何判断?  换句话说就是如何判断选中与取消选中?在什么地方判断?还要知道当前选择与取消选择所操作的项的序号?

解决方案 »

  1.   

    取消选中应该也是触发SelectedIndexChanged事件的吧,定义一个全局变量记录所有checkbox的状态,然后每次对比一下,这样应该可以吧
      

  2.   

    private void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        idx = e.Index;    //当前的选中项序号,(不只是被选中后会响应此事件取得Index值,在取消选中后也会响应此事件,取得Index值)
         CheckState checkValue =  e.NewValue;    //取当前被操作的复选框的状态,在这之后可以进行一下对Index和CheckState的判断,然后进行后续操作
    }你是想知道这个吗?
      

  3.   

    搞定了。多谢,结贴去~
    private int idx;
    private CheckState checkValue;private void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
    idx = e.Index;
    checkValue = e.NewValue;
    }
    private void clb_SelectedIndexChanged(object sender, EventArgs e)
    {
    switch (checkValue)
    {
    case CheckState.Checked:
    {
    // Do SomeThing...
    }
    break; case CheckState.Unchecked:
    {
    // Do SomeThing...
    }
    break;
    }
    }