user3508497
user3508497

Reputation: 13

c# listview detect checkbox change

I'm trying to detect when a checkbox in a listview is changed so I can change the colour of the background. I've searched in google and found examples but I can't get any of them to work so I created a new project and added an example from msdn to test but that didn't work either.

The code I used for testing is:

private void InitializeListView()
{
    this.ListView1 = new System.Windows.Forms.ListView();

    // Set properties such as BackColor and DockStyle and Location. 
    this.ListView1.BackColor = System.Drawing.SystemColors.Control;
    this.ListView1.Dock = System.Windows.Forms.DockStyle.Top;
    this.ListView1.Location = new System.Drawing.Point(0, 0);
    this.ListView1.Size = new System.Drawing.Size(292, 130);
    this.ListView1.View = System.Windows.Forms.View.Details;
    this.ListView1.HideSelection = false;

    // Allow the user to select multiple items. 
    this.ListView1.MultiSelect = true;

    // Show CheckBoxes in the ListView. 
    this.ListView1.CheckBoxes = true;

    //Set the column headers and populate the columns.
    ListView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;

    ColumnHeader columnHeader1 = new ColumnHeader();
    columnHeader1.Text = "Breakfast Choices";
    columnHeader1.TextAlign = HorizontalAlignment.Left;
    columnHeader1.Width = 146;

    ColumnHeader columnHeader2 = new ColumnHeader();
    columnHeader2.Text = "Price Each";
    columnHeader2.TextAlign = HorizontalAlignment.Center;
    columnHeader2.Width = 142;

    this.ListView1.Columns.Add(columnHeader1);
    this.ListView1.Columns.Add(columnHeader2);

    string[] foodList = new string[]{"Juice", "Coffee", 
        "Cereal & Milk", "Fruit Plate", "Toast & Jelly", 
        "Bagel & Cream Cheese"};

    string[] foodPrice = new string[]{"1.09", "1.09", "2.19", 
        "2.79", "2.09", "2.69"};

    int count;

    // Members are added one at a time, so call BeginUpdate to ensure  
    // the list is painted only once, rather than as each list item is added.
    ListView1.BeginUpdate();

    for(count = 0; count < foodList.Length; count++)
    {
        ListViewItem listItem = new ListViewItem(foodList[count]);
        listItem.SubItems.Add(foodPrice[count]);
        ListView1.Items.Add(listItem);
    }

    //Call EndUpdate when you finish adding items to the ListView.
    ListView1.EndUpdate();
    this.Controls.Add(this.ListView1);
}

    public Form1()
    {
        InitializeComponent();
        InitializeListView();
    }

    double price = 0.0;

// Handles the ItemCheck event. The method uses the CurrentValue 
// property of the ItemCheckEventArgs to retrieve and tally the   
// price of the menu items selected.   
private void ListView1_ItemCheck1(object sender, 
    System.Windows.Forms.ItemCheckEventArgs e)
{
    if (e.CurrentValue==CheckState.Unchecked)
    {
        price += Double.Parse(
            this.ListView1.Items[e.Index].SubItems[1].Text);
    }
    else if((e.CurrentValue==CheckState.Checked))
    {
        price -= Double.Parse(
            this.ListView1.Items[e.Index].SubItems[1].Text);
    }

    // Output the price to TextBox1.
    TextBox1.Text = price.ToString();
}

I created a listview and textbox named correctly but it still didn't work.

Any help would be appreciated!

Upvotes: 1

Views: 3649

Answers (1)

Andy
Andy

Reputation: 4097

The MSDN article says Ensure that the ItemCheck event is associated with the event handler in this example. That's missing in your code.

Add:

this.ListView1.ItemCheck += ListView1_ItemCheck1;

to InitializeListView.

Upvotes: 3

Related Questions