c#listview检测复选框更改

时间:2014-04-07 21:01:35

标签: c# listview checkbox

我试图检测列表视图中的复选框何时更改,以便我可以更改背景的颜色。我在谷歌搜索并找到了示例,但我无法使其中任何一个工作,所以我创建了一个新项目,并添加了msdn的示例进行测试但是没有工作任

我用于测试的代码是:

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();
}

我创建了一个正确命名的列表视图和文本框,但它仍然无法正常工作。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

MSDN文章说Ensure that the ItemCheck event is associated with the event handler in this example.。你不会这样做。

添加:

this.ListView1.ItemCheck += ListView1_ItemCheck1;

InitializeListView