2012-10-13 15 views
11

Liste Görünümü'nde çift tıklatılmış satır değeri almak için herhangi bir olasılık var mı? i liste görünümü bazı satır doubleclick zaman DoubleClickBir liste içinde bir satırda tıklayın

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

Ancak mesajın üzerinde

i olsun:

System.Windows.Forms.ListView + SelectedListViewItemCollection

nedir Bir etkinliği kayıtlı daha fazla, listView'de 2 sütun var:

Ve iki kutudaki satırın "KİMLİĞİ" mesaj kutusunun içinde göstermek istiyorum.
Nasıl yapmalı? Bu etkinlikten nasıl değer alınır?

cevap

16

bu deneyin:

private void lvLista_DoubleClick(object sender, EventArgs e) 
{ 

    MessageBox.Show(lvLista.SelectedItems[0].SubItems[0].Text); 
} 
+1

bu kodla (potansiyel) bir sorundur, ne olursa listesinin boş bir alanı kullanıcı tıkladığında veya çift tıklama? Bazı durumlarda, sonuç olarak en son seçilen öğenin hangisi olmasını isteyebilirler. Diğer durumlarda, kullanıcı, çift tıklama için bir öğeyi açıkça seçmedikçe hiçbir şeyin olmasını istemeyebilirler. – XIVSolutions

+0

Görüyorum ki en azından biraz yanlışım. Kullanıcı boş bir alana çift tıklarsa DoubleClick etkinliği tetiklenmez. Çok kısa görüşlüyüm (diğer yöntemlerle kullanılmak üzere üye değişkeni ayarlayan farklı bir uygulama kullanıyordum, bu yüzden MouseDown Olayı kullanılarak hiçbir şeyin tıklanmadığı durumu ele almak gerekiyordu). – XIVSolutions

+0

Bu kod, bir satırdaki onay kutusunu çift tıklattığınızda sorun var. – confusedMind

20

Eğer MouseDown ve/veya ListView kontrolünün MouseDoubleClick olayları işlemek ve fare eylem hedefini belirlemek için HitTest yöntemi kullanırsanız, olmuştur hangi madde bilecek çift ​​tıklanmış. Bu ayrıca, NO öğesinin tıklatılıp tıklanmadığını belirlemek için iyi bir yoldur (örneğin, kısmen doldurulmuş bir listede boş alana tıklamak.)

Aşağıdaki kod, tıklatılan öğeyi tek bir tıklatmayla bir metin kutusunda görüntüleyecektir ve çift ​​tıklama varsa çift tıklanan öğenin adıyla bir mesaj kutusu açılacaktır

Bir öğenin, metin kutusunun veya iletinin doldurduğu liste görünümünün bir alanında tıklama veya çift tıklama oluşursa kutu aslında yopu bilgilendirmek.

Bu önemsiz bir örnektir ve ihtiyaçlarınıza bağlı olarak, bunu biraz uğraşmak zorunda kalacaktır.

UPDATE: Listenin boş bir alanı tıklandığında veya çift tıklandığında Liste Görünümü denetiminin SelectedItems özelliğini temizleyen bir kod ekledim.

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(e.X, e.Y); 
     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(e.X, e.Y); 
     ListViewItem item = info.Item; 

     if (item != null) 
     { 
      this.textBox1.Text = item.Text; 
     } 
     else 
     { 
      this.listView1.SelectedItems.Clear(); 
      this.textBox1.Text = "No Item is Selected"; 
     } 
    } 
} 
1

sayesinde; ihtiyacım olan buydu. Kabul cevabı bana yardım etmedi beri ı ı paylaşmak düşündüm

ListViewHitTestInfo info = ((ListView)sender).HitTest(e.X, e.Y); 
1

bu

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; 

} 
1

deneyin: Ben aynı zamanda bir daha genel yerel bilgi değişkeni kurmak olabilir belirtmekte fayda var Çözümüm aynı soruna: çift tıklama etkinliğinde liste görünümünde belirli bir sütundan veri almak.

aşağıdaki satırı Çift bir dize olarak tıklatmışlardır üst üste ikinci sütunun veri döndürür:

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

bu parçacığı eski olduğunu biliyorum ama buraya kimse düzgün soruyu yanıtladı benim görüş.Gelecekte olanlar için, MSDN gelen, bu deneyin:

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