【问题标题】:double click item in listview c#双击列表视图中的项目C#
【发布时间】:2012-08-07 09:33:34
【问题描述】:

我仍然无法理解如何使列表视图中的项目可点击并出现消息框。

这是我的代码。

private void button6_Click(object sender, EventArgs e)
    {
        ListViewItem listviewitem;

        listviewitem = new ListViewItem("John");
        listviewitem.SubItems.Add("Smith");
        listviewitem.SubItems.Add("kaya");
        listviewitem.SubItems.Add("bun");
        this.listView1.Items.Add(listviewitem);
        listView1.FullRowSelect = true;

//显示标题 listView1.View = View.Details;

        // Loop through and size each column header to fit the column header text.
        foreach (ColumnHeader ch in this.listView1.Columns)
        {
            ch.Width = -2;
        }

}

我已阅读 itemActive 并尝试过此操作。我正在添加listView1.SelectedItems[0].Text

    private void button6_Click(object sender, EventArgs e)
        {
            ListViewItem listviewitem;

            listviewitem = new ListViewItem("John");
            listviewitem.SubItems.Add("Smith");
            listviewitem.SubItems.Add("kaya");
            listviewitem.SubItems.Add("bun");
            this.listView1.Items.Add(listviewitem);
            listView1.FullRowSelect = true;

            MessageBox.Show("You clicked " + listView1.SelectedItems[0].Text);
}

此打印输出错误

参数超出范围。 “0”不是有效的索引数。

请帮帮我。

【问题讨论】:

  • 为什么不使用 .Listview Click 事件或 slectedindexchanged 事件?
  • 我做了,但它不起作用,我不想更改索引。我只想单击列表,它将弹出所选列表的详细信息

标签: c# listview double-click


【解决方案1】:

在button6_Click() 上仅在listView1 中添加新创建的listviewitem

private void button6_Click(object sender, EventArgs e)
{
    ListViewItem listviewitem;

    listviewitem = new ListViewItem("John");
    listviewitem.SubItems.Add("Smith");
    listviewitem.SubItems.Add("kaya");
    listviewitem.SubItems.Add("bun");
    this.listView1.Items.Add(listviewitem);
    listView1.FullRowSelect = true;

    //MessageBox.Show("You clicked " + listView1.SelectedItems[0].Text);
}

针对listView1注册Click事件

this.listView1.Click += new System.EventHandler(this.listView1_Click);

在它的事件处理程序中检查listView1.SelectedItems[0]

private void listView1_Click(object sender, EventArgs e)
{
     if(listView1.SelectedItems.Count > 0)
             MessageBox.Show("You clicked " + listView1.SelectedItems[0].Text);
}

对于文档,please check MSDN

【讨论】:

  • 请问,如何针对listView1注册点击事件?
  • 正如我提到的,您可以添加 this.listView1.Click += new System.EventHandler(this.listView1_Click);在你的代码中。或者从设计器中选择列表视图,在属性窗口中单击事件按钮。将出现包含所有列表视图事件的列表。从列表中找出“单击”并双击它。将注册 Click 事件并添加空事件处理程序。
【解决方案2】:

您实际上还没有选择一个项目,这就是您收到错误的时候:

InvalidArgument=“0”的值对“索引”无效。

设置一些保护来检查项目是否被选中:

if (listView1.SelectedItems.Count > 0)
{
    MessageBox.Show("You clicked " + listView1.SelectedItems[0].Text);
}
else
{
     MessageBox.Show("Please select an item");
}

或者选择代码中的项目:

private void button6_Click(object sender, EventArgs e)
    {
        ListViewItem listviewitem;

        listviewitem = new ListViewItem("John");
        listviewitem.SubItems.Add("Smith");
        listviewitem.SubItems.Add("kaya");
        listviewitem.SubItems.Add("bun");
        this.listView1.Items.Add(listviewitem);
        //listView1.FullRowSelect = true;
        listView1.Items[0].Selected = true;
        MessageBox.Show("You clicked " + listView1.SelectedItems[0].Text);
}

【讨论】:

  • 第一个,它在我什至可以单击任何列表之前弹出消息“选择一个项目”。同时,对于第二种方式,我希望用户可以单击一个项目的任何子项目上面的代码首先显示消息框,然后显示列表。这不是我想要的。
  • 这两个示例都解释了您收到错误的原因。我认为您最好弄清楚您需要用一个事件填充列表,而在另一个事件(即 ListItem_Click)中,您将显示一个消息框。 @hamad 已向您展示了您想要的东西。我可以建议通过 google 或 as you go 了解这些 great books,因为编程对于 learn well 来说太复杂了。祝你好运!
【解决方案3】:

你确定有一个活跃的项目吗? 可能是因为您没有选择列表中的任何项目。检查所选项目,

 string msg = (listView1.SelectedItems.Count >0) ? "You Clicked " + 
listView1.SelectedItems[0].Text  : "Please select an item.";

MessageBox.Show(msg);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多