【问题标题】:C# - ListView : How to handle the mouse click event on a listViewItem?C# - ListView:如何处理 listViewItem 上的鼠标单击事件?
【发布时间】:2016-06-15 17:04:42
【问题描述】:

假设我在表单上有一个 ListView,它填充了记录。 我该怎么做:当我单击(单击)一行时,必须发生一些事情 - 例如 MessageBox.Show("row selected");

如何做到这一点?我需要鼠标点击事件吗?我该怎么做?

【问题讨论】:

  • 哪个 ListView 控件? WPF? Windows 窗体?

标签: c# listview click mouseevent items


【解决方案1】:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var selectedItemText = (listBox1.SelectedItem ?? "(none)").ToString();
    MessageBox.Show("Selected: " + selectedItemText);
}

private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
    for (int i = 0; i < listBox1.Items.Count; i++)
    {
        var rectangle = listBox1.GetItemRectangle(i);
        if (rectangle.Contains(e.Location))
        {
            MessageBox.Show("Item " + i);
            return;
        }
    }

    MessageBox.Show("None");
}

【讨论】:

  • 但是我需要每当我​​点击一个 Item 时,就会发生这种情况。
  • 其实“SelectedIndexChanged”总是通过鼠标点击调用的。如果你坚持“MouseClick”,你可以使用“GetItemRectangle”。
  • 正如@Barun 所说,这个答案对于 ListView 来说是 not。没有 GetItemRectangle() 方法。
【解决方案2】:

@Tommy 的答案是针对 ListBox,这个是针对 ListView 的:

    private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        for (int i = 0; i < listView1.Items.Count; i++)
        {
            var rectangle = listView1.GetItemRect(i);
            if (rectangle.Contains(e.Location))
            {
                //Write your code here
                return;
            }
        }
    }

【讨论】:

    【解决方案3】:

    为了防止带有复选框的 ListView 出现意外行为,我的解决方案是:

    private void lvMembers_MouseClick(object sender, MouseEventArgs e)
    {
        for (int itemIndex = 0; itemIndex < lvMembers.Items.Count; itemIndex++)
        {
            ListViewItem item = lvMembers.Items[itemIndex];
            Rectangle itemRect = item.GetBounds(ItemBoundsPortion.Label);
            if (itemRect.Contains(e.Location))
            {
                item.Checked = !item.Checked;
                break;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      如果你想在鼠标点击时选择列表视图项目,试试这个。

       private void timeTable_listView_MouseUp(object sender, MouseEventArgs e)
              {
                  Point mousePos = timeTable_listView.PointToClient(Control.MousePosition);
                  ListViewHitTestInfo hitTest = timeTable_listView.HitTest(mousePos);
      
      
      
                  try
                  {
                  int columnIndex = hitTest.Item.SubItems.IndexOf(hitTest.SubItem);
                  edit_textBox.Text = timeTable_listView.SelectedItems[0].SubItems[columnIndex].Text;
                  }
                  catch(Exception)
                  {
      
                  }
      
      
      
              }
      

      【讨论】:

        猜你喜欢
        • 2019-10-09
        • 2021-08-16
        • 1970-01-01
        • 2012-12-09
        • 2010-10-05
        • 2016-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多