DoubleClick在ListView中排成一行

是否有可能在ListView中获取doubleclicked行的值? 我注册了一个活动:

private void lvLista_DoubleClick(object sender, EventArgs e) { MessageBox.Show(lvLista.SelectedItems.ToString()); } 

但是在消息上,当我在listview中双击某行时,我得到:

System.Windows.Forms.ListView + SelectedListViewItemCollection

更重要的是,我在listview中有两列:

  lvLista.Columns.Add("ID"); lvLista.Columns.Add("Tilte"); 

我想在messagebox中显示doubleclicked行的“ID”。
怎么做? 如何从此活动中获取价值?

试试这个:

 private void lvLista_DoubleClick(object sender, EventArgs e) { MessageBox.Show(lvLista.SelectedItems[0].SubItems[0].Text); } 

如果您处理ListView控件的MouseDown和/或MouseDoubleClick事件,并使用HitTest方法确定鼠标操作的目标,您将知道双击了哪个项目。 这也是确定是否单击了任何项目的好方法(例如,单击部分填充列表中的空白区域)。

如果单击发生,以下代码将在文本框中显示单击的项目,如果发生双击,将弹出一个带有双击项目名称的消息框。

如果单击或双击发生在未由项填充的列表视图的区域中,则文本框或消息框会通知yopu该事实。

这是一个微不足道的例子,根据您的需要,您将不得不捣乱它。

更新:我添加了一些代码,当单击或双击列表的空白区域时,它会清除Listview控件的SelectedItems属性。

 public partial class Form1 : Form { public Form1() { InitializeComponent(); listView1.MouseDown += new MouseEventHandler(listView1_MouseDown); listView1.MouseDoubleClick += new MouseEventHandler(listView1_MouseDoubleClick); this.Load += new EventHandler(Form1_Load); } void Form1_Load(object sender, EventArgs e) { this.SetupListview(); } private void SetupListview() { ListView lv = this.listView1; lv.View = View.List; lv.Items.Add("John Lennon"); lv.Items.Add("Paul McCartney"); lv.Items.Add("George Harrison"); lv.Items.Add("Richard Starkey"); } void listView1_MouseDoubleClick(object sender, MouseEventArgs e) { ListViewHitTestInfo info = listView1.HitTest(eX, eY); ListViewItem item = info.Item; if (item != null) { MessageBox.Show("The selected Item Name is: " + item.Text); } else { this.listView1.SelectedItems.Clear(); MessageBox.Show("No Item is selected"); } } void listView1_MouseDown(object sender, MouseEventArgs e) { ListViewHitTestInfo info = listView1.HitTest(eX, eY); ListViewItem item = info.Item; if (item != null) { this.textBox1.Text = item.Text; } else { this.listView1.SelectedItems.Clear(); this.textBox1.Text = "No Item is Selected"; } } } 

我知道这个post已经老了,但我认为没有人在这里正确地回答了这个问题。 对于未来的用户,请尝试使用MSDN :

 this.myListView.Activation = System.Windows.Forms.ItemActivation.TwoClick; this.myListView.ItemActivate += new System.EventHandler(this.myListView_ItemClick); 

谢谢; 这就是我需要的。 我想我也会提到可以更普遍地设置本地信息变量:

  ListViewHitTestInfo info = ((ListView)sender).HitTest(eX, eY); 

试试这个

 private void listView1_MouseClick(object sender, MouseEventArgs e) { ListViewHitTestInfo hit = listView1.HitTest(e.Location); Rectangle rowBounds = hit.SubItem.Bounds; Rectangle labelBounds = hit.Item.GetBounds(ItemBoundsPortion.Label); int leftMargin = labelBounds.Left - 1; string x = hit.Item.Text; } 

由于接受的答案对我没有帮助,我以为我会分享我对同一问题的解决方案:在双击事件中从列表视图中的特定列获取数据。

以下行返回我双击作为字符串的行中第二列的数据:

 private void listViewOutput_DoubleClick(object sender, EventArgs e) { string content = listViewOutput.Items[listViewOutput.SelectedIndices[0]].SubItems[1].Text }