【问题标题】:c# listview detect checkbox changec# listview 检测复选框更改
【发布时间】:2020-11-02 21:39:41
【问题描述】:

我正在尝试检测列表视图中的复选框何时更改,以便我可以更改背景颜色。我在 google 中搜索并找到了示例,但我无法让其中任何一个工作,所以我创建了一个新项目并添加了来自 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();
}

我创建了一个名称正确的列表视图和文本框,但它仍然不起作用。

任何帮助将不胜感激!

【问题讨论】:

  • 请更准确,而不是写“但它仍然不起作用”并描述它到底发生了什么。

标签: c# listview checkbox


【解决方案1】:

MSDN 文章说Ensure that the ItemCheck event is associated with the event handler in this example。您的代码中没有。

添加:

this.ListView1.ItemCheck += ListView1_ItemCheck1;

到InitializeListView。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2016-04-01
    • 2016-09-24
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多