Divinitus
Divinitus

Reputation: 33

No overload for '...' matches delegate 'System.Windows.Forms.ItemCheckEventHandler'

After reading this question, it has become apparent to me that I am writing my event incorrectly. However, I have no idea how I am going to be able to re-write what I have written using Object sender. My event adds the text from selected checkboxes to a two-dimensional list (report), and the order in report must be the same as the order of the selected checkboxes. Also, no more than two checkboxes can be selected at a time. Here is the event:

void checkedListBox_ItemCheck(CheckedListBox chkdlstbx, ItemCheckEventArgs e)
    {
        int index = Convert.ToInt32(chkdlstbx.Tag);
        if ((chkdlstbx.CheckedItems.Count == 0) && (e.CurrentValue == CheckState.Unchecked))
        {
            Var.report[index].Add(chkdlstbx.Text);
        }
        if ((chkdlstbx.CheckedItems.Count == 1) && (e.CurrentValue == CheckState.Checked))
        {
            Var.report[index].RemoveAt(0);
        }
        if ((chkdlstbx.CheckedItems.Count == 1) && (e.CurrentValue == CheckState.Unchecked))
        {
            if (chkdlstbx.SelectedIndex < chkdlstbx.CheckedIndices[0])
            {
                Var.report[index].Insert(0, chkdlstbx.Text);
            }
            else
            {
                Var.report[index].Add(chkdlstbx.Text);
            }
        }
        if ((chkdlstbx.CheckedItems.Count == 2) && (e.CurrentValue == CheckState.Checked))
        {
            if (chkdlstbx.SelectedIndex == chkdlstbx.CheckedIndices[0])
            {
                Var.report[index].RemoveAt(0);
            }
            else
            {
                Var.report[index].RemoveAt(1);
            }
        }
        if ((chkdlstbx.CheckedItems.Count == 2) && (e.CurrentValue == CheckState.Unchecked))
        {
            e.NewValue = CheckState.Unchecked;
        }
        updateReport();
    }

It is being called by this line:

chkdlstbx.ItemCheck += new ItemCheckEventHandler(checkedListBox_ItemCheck);

If anyone could help me re-write my event using object, that'd be awesome. I'm not really sure how else I would go about solving this problem!

Upvotes: 3

Views: 490

Answers (1)

chomba
chomba

Reputation: 1451

This should suffice:

void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
    CheckedListBox chkdlstbx = sender as CheckedListBox;
    if (chkdlstbx == null)
    {
        throw new InvalidArgumentException();
    }
    ....
}

Upvotes: 1

Related Questions