2009-01-19 13 views
6

Treeview.HideSelection = false; Ancak, seçilen öğenin orijinal seçili renk olarak kalması için odak kaybolduktan nasıl emin olabilirim?C# Odağı kaybettiğinde seçili düğümün vurgulanmasının nasıl sağlandığından nasıl emin olabilirim?

DÜZENLEME:

Ben süreç olayların bir listesini tutan bir form üzerinde bir liste görünümü var. Aynı formdaki Treeview'ın yanı sıra, kullanıcının olayı liste görünümünde sınıflandırmak için tamamladığı bir dizi seçimdir. Ancak, kullanıcı sınıflandırma denetimlerinden birinde bir seçim yaptığında, mavi vurgulanan seçili Treeview öğesi gri renge döner. Aynı rengi mavi yapmak için bu rengi tanımlayan mülkü bulmayı umuyordum.

Herhangi bir öneri.

Güncelleme:

public partial class myTreeView : TreeView 
{ 
    TreeNode tn = null; 
    public myTreeView() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnAfterSelect(TreeViewEventArgs e) 
    { 
     if (tn != null) 
     { 
      tn.BackColor = this.BackColor; 
      tn.ForeColor = this.ForeColor; 
     } 
     tn = e.Node; 
     base.OnAfterSelect(e); 
    } 
    protected override void OnBeforeSelect(TreeViewCancelEventArgs e) 
    { 

     e.Node.BackColor = Color.Green; 
     e.Node.ForeColor = Color.White; 
     base.OnBeforeSelect(e); 
    } 
    protected override void OnGotFocus(System.EventArgs e) 
    { 

     base.OnGotFocus(e); 
    } 

    protected override void OnLostFocus(System.EventArgs e) 
    { 

     if (tn != null) 
     { 
      tn.BackColor = Color.Green; 
      tn.ForeColor = Color.White; 
     } 
     // tn.BackColor = Color.Red; 

     base.OnLostFocus(e); 
    } 
} 
+0

Tüm uygulamaya veya yalnızca belirli bir alana odaklanmaktan mı bahsediyorsunuz? Ayrıca, öğe seçili mi, yoksa kendini seçmeli mi? –

+0

Sana başka sorunu çözmek için çalışıyor ve seçim rengiyle bozuyorsun şüpheli çözmek için nasıl senin fikrin. Bence bu kötü bir fikir. Bunun yerine orijinal sorununuzu sorun. Kesinlikle daha iyi bir çözüm var. –

cevap

11

ListView.HideSelection öğesinin true olarak ayarlanması, odak kaybolduğunda, seçimin gizleneceği anlamına gelir. HideSelection parametresini false olarak ayarlayarak, seçilen öğenin hangi öğenin seçildiğini gösteren renk göstergesi olacaktır.

+0

teşekkür vurgulamak renginin sıfırdan bir kullanıcı kontrolü yapacağını gibi, benim açımdan yazım yanlışı – Brad

1

Genellikle, senin yok. Renkteki değişiklik, hangi kontrole odaklanıldığını gösteren görsel ipuçlarından biridir. Müşterilerinizi bundan kurtularak şaşırtmayın.

Eğer sözleşmeyi kurmak istiyorsanız, kontrol sahibinizi çizebilir ve daha sonra istediğiniz renkleri boyayabilirsiniz.

Diğer bir seçenek, sizin durumunuzda, bir liste kutusu yerine açılır bir açılan kutu kullanmaktır. Ardından, kontrolün odaklanıp odaklanmamasına bakılmaksızın mevcut seçim her zaman açıktır. Ya da, her olayın ayrı ayrı verilen tüm ayarları olduğu bir ızgara kullanmayı düşünebilirsiniz ve sonra "seçim" hiç önemli değildir.

+0

kongre ikiyüzlü olduğunu ... liste kutusu veya DataGridView deneyin. Her ikisi de odakta olmasa bile mavi vurguyu korur. – Christian

+0

Cevapları bu tür dışarı iyi bir kahkaha olsun. "Bu şekilde çalışmıyor. Kendin yap". Herkes sırf bir seçim – makoshichi

0

Eğer bunu yapıyor olsaydım, seçilecek sınıflandırma kontrollerinin üzerinde, hangi işlem olayının seçildiğini gösteren, ListView yanında ekstra bir Etiket olurdu. Etkinlik hakkında daha fazla ayrıntı eklemek için söz konusu Etiketi de kullanabilirsiniz (varsa).

Bu şekilde, standart kullanıcı arabirimi kurallarına ve numaralarına bağlı kalıyorsunuz, bu da kullanıcıya geçerli seçiminin ne kadar açık olduğunu gösteriyor.

-2

HideSelection = false; cevap, çünkü:

  1. Çok kolay

  2. Ben düğümler aracılığıyla döngüleri ve bu sarıya arka planı değiştirerek ilgili olanları işaretler bir arama işlevi varken bir metin kutusu dolguları düğüm tıkladığında Bu düğümü kullanmadan önce, bu yöntemi kullanmadan önce, kullanıcı metin kutusunun üzerine tıklamak için metin kutusuna tıklarsa, düğümün seçilmesini ve hangi düğümün seçildiğini takip etmeyi zorlaştırır. odakta değilken kullanılan mavi vurguya karşı odakta olmadığını gösteren açık gri renkte vurgulanır. Düğümü 'boyayabilirdim' ancak arama sonuçları için sarı arka planın olması gerekenden daha karmaşık hale getirecekti.

  3. Kolay olduğunu söylemiş miydim?

0

Bu kodu kullanıyorum; benim için çalışıyor.

tasarım: Mytreeview.HideSelection = True olacak manuel vurgulamak kaybetmek odak seçilen düğüm.

Private Sub MyTreeview_Leave(sender As Object, e As EventArgs) Handles MyTreeview.Leave 
    MyTreeview.SelectedNode.BackColor = Color.LemonChiffon 
End Sub 

Private Sub MyTreeview_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles MyTreeview.BeforeSelect 
    If MyTreeview.SelectedNode IsNot Nothing Then 
     MyTreeview.SelectedNode.BackColor = Color.White 
End Sub 
İlgili konular