2009-01-19 62 views
6

我已更改Treeview.HideSelection = false; 但是我如何確保在焦點丟失時所選項目保持原始選定顏色?C#如何確保所選節點在焦點丟失時保持突出顯示

編輯:

我有保存過程中的事件列表窗體上的列表視圖。在同一個窗體上的樹視圖旁邊是用戶完成的一系列選擇,以便在列表視圖中對事件進行分類。但是,當用戶在其中一個分類控件上進行選擇時,藍色突出顯示的所選樹視圖項目變爲灰色。我希望能夠找到定義這種顏色的屬性,使其成爲藍色。

有任何建議。

更新:

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

您是在談論關注整個應用程序還是僅僅是特定的領域?另外,如果項目保持選擇狀態,還是應該取消選擇? – 2009-01-19 00:15:27

+0

我懷疑你正在試圖解決一些其他問題,並搞亂選擇顏色是你如何解決它的想法。我認爲這是一個壞主意。改爲詢問你原來的問題。肯定有更好的解決方案。 – 2009-01-19 02:12:55

回答

11

ListView.HideSelection設置爲true意味着當焦點丟失時,它將隱藏選擇。通過將HideSelection設置爲false,選定的項目仍將具有顯示選擇哪個項目的顏色指示器。

1

一般情況下,你不知道。顏色的變化是指示哪個控件具有焦點的視覺提示之一。不要混淆你的客戶,擺脫這一點。

如果你想打破慣例,那麼你可以讓你的控件擁有者繪製,然後你可以繪製任何你想要的顏色的項目。

另一種選擇,你的情況是使用下拉組合框,而不是列表框。那麼當前的選擇總是很清楚,無論控制是否有重點。或者,您可以考慮使用網格,其中每個事件都具有單獨給定的所有設置,然後「選擇」根本無關緊要。

+0

約定是一個僞君子...嘗試ListBox或DataGridView。即使沒有對焦,兩者都保留藍色突出顯示。 – Christian 2015-01-20 11:20:23

0

如果我這樣做了,我會在ListView旁邊添加一個額外的標籤,在選擇的分類控件上方,這將指示選擇了哪個過程事件。您也可以使用該標籤來添加有關該事件的額外詳細信息(如果有)。

通過這種方式,您堅持使用標準UI約定,使用戶更清楚地瞭解他們當前的選擇。

-2

我喜歡HideSelection = false;答案,因爲:

  1. 這很容易

  2. 我有一個通過節點的循環,並通過改變它的背景顏色爲黃色,標誌着相關的多個搜索功能,當節點上的一個文本框填充用戶點擊在附加到該節點的相關信息之前,在我使用此方法之前,如果用戶單擊文本框以滾動瀏覽它,它將忽略節點並使其難以跟蹤哪個節點被選中,這樣它仍然是用淡灰色突出顯示它不是焦點,與在聚焦時使用的藍色突出顯示相反。我可以對節點進行「繪製」,但搜索結果的黃色背景會讓生活變得比需要的複雜。

  3. 我提到它很容易嗎?

0

我使用此代碼;這個對我有用。

設計:Mytreeview.HideSelection = True您將手動突出顯示失焦選定節點。

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 
相關問題