it-swarm.asia

ListView'da bir öğeyi programlı olarak nasıl seçebilirim?

ListView'deki ilk öğeyi programlı olarak seçmeye çalışıyorum, ancak seçilmemiş gibi görünüyor. Aşağıdaki kodu kullanıyorum:

if (listView1.Items.Count > 0)
    listView1.Items[0].Selected = true;

Aslında daha önce bu sorunu yaşadım ama nasıl çözdüğümü hatırlayamıyorum!

57
Homam

Büyük olasılıkla, öğesi seçiliyor, farklı bir kontrolün odağı olduğu için söyleyemezsiniz. Uygulamanızın tasarımına bağlı olarak, bunu çözmenin birkaç farklı yolu vardır.

  1. Basit çözüm, formunuz her görüntülendiğinde odağı ListView olarak ayarlamaktır. Kullanıcı genellikle odağı kontrollere tıklayarak seçer. Ancak, hangi kontrollerin odağı programlı olarak alacağını da belirleyebilirsiniz. Bunu yapmanın bir yolu, kontrolün sekme indeksini 0'a ayarlamaktır (en düşük değer, ilk odaklanacak kontrolü belirtir). İkinci bir olasılık, aşağıdaki kod satırını formunuzun Load olayında veya Selected özelliğini ayarladıktan hemen sonra kullanmaktır:

    myListView.Select();
    

    Bu çözümle ilgili sorun, kullanıcı formunuzu farklı bir kontrole ayarladığında (metin kutusu veya düğme gibi) seçilen öğenin artık görünmemesidir.

  2. Bunu düzeltmek için HideSelection denetiminin ListView özelliğini / False olarak ayarlamanız gerekir. Bu, kontrol odağını kaybettiğinde bile seçilen öğenin vurgulanmış kalmasına neden olacaktır.

    Kontrol odağa geldiğinde, seçilen öğenin arka planı sistem vurgu rengi ile boyanacaktır. Kontrol odağın değil olduğunda, seçilen öğenin arka planı gri (veya devre dışı) metin için kullanılan sistem renginde boyanacaktır.

    Bu özelliği tasarım zamanında veya kod aracılığıyla ayarlayabilirsiniz:

    myListView.HideSelection = false;
    
77
Cody Gray
if (listView1.Items.Count > 0)
{
    listView1.Items[0].Selected = true;
    listView1.Select();
}

kontrol odağı olmadıkça liste öğeleri seçilmez (veya HideSelection özelliğini false olarak ayarlarsanız)

27
VikciaR

Bence sorunun ve çözümün gri gri tarafından tanımlandığını! Ek bir notum var.

Lütfen belirtilen liste görünümü öğesinin (ve kontrol!) Odağını kontrol edin. Odağı ve seçimi aşağıdaki kod satırlarıyla ayarlayabilirim:

this.listView1.Items[1].Selected = true;
this.listView1.Items[1].Focused = true;

Ancak odaklanmış kontrol bir durumdu! 

7
bitsmuggler
        int i=99;//is what row you want to select and focus
        listViewRamos.FocusedItem = listViewRamos.Items[0];
        listViewRamos.Items[i].Selected = true;
        listViewRamos.Select();
        listViewRamos.EnsureVisible(i);//This is the trick
3
Kursat Turkay
ListViewItem.IsSelected = true;
ListViewItem.Focus();
0
user1724225

Bunun eski bir soru olduğunu biliyorum, ancak bunun kesin bir cevap olduğunu düşünüyorum.

listViewRamos.Items[i].Focused = true;
listViewRamos.Items[i].Selected = true;
listViewRemos.Items[i].EnsureVisible();

Bir kontrol şansı odağın bulunmadığı ancak odağı kontrole zorlamak istediğinizde, aşağıdaki satırı ekleyebilirsiniz.

listViewRamos.Select();

Microsoft neden sadece sizin için tüm bunları yapan bir SelectItem() yöntemi eklemedi.

0
Jonathan Wood
if (listView1.Items.Count > 0)
{
    listView1.FocusedItem = listView1.Items[0];
    listView1.Items[0].Selected = true;
    listView1.Select();
}
0
user1119399