2009-03-13 8 views
8

ツリービューでノードを選択すると、ハイライト表示され、下のノードに基づいてデータが表示されます。別のコントロールを選択すると(ツリービューのフォーカスが失われます)、強調表示されなくなります。フォーカスを失った後、どのように強調表示しますか?検索を行っている間、私はテキストボックスに焦点を当てておく必要があるので、どのノードが選択されているのかわからないので(ユーザーがもっとテキストを入力できるように)C#、select()、focusのTreeViewコントロール

答えて

10

あなたがfalseにHideSelectionプロパティを設定する必要があります - ので、TreeViewコントロールがフォーカス

+0

... – bernhardrusch

+2

を.NETとWPF。 WinFormsコントロールのみがHideSelectionプロパティを持ちます。 – wigy

+0

これは、なぜVisual Studioデザイナーが 'HideSelection'プロパティのデフォルト値として' true'を割り当てるのか不思議に思います。私は、大部分のユースケースでは、現在選択されているノードを非表示にするのではなく、***が望ましいと思います。 – DavidRR

3

を失ったaltoughあなたは、私はちょうどこの問題に遭遇すると、これは、私はそれに対処する方法で、選択が表示されます:描画モードプロパティを変更TreeViewDrawMode.OwnerDrawTextへとHideSelectionをFalseに設定し、TreeViewコントロールがフォーカスを失われたときのハイライトの色はお好みに合わせて十分に明るくない場合DrawNodeイベント


    private void MyTreeGridview_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    { 
     if ((e.State == TreeNodeStates.Selected) && (!MyTreeGridview.Focused)) 
     { 
      Font font = e.Node.NodeFont ?? e.Node.TreeView.Font; 
      Color fore = e.Node.ForeColor; 
      if (fore == Color.Empty)fore = e.Node.TreeView.ForeColor;  
      fore = SystemColors.HighlightText; 
      Color highlightColor = SystemColors.Highlight; 
      e.Graphics.FillRectangle(new SolidBrush(highlightColor), e.Bounds); 
      ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, fore, highlightColor); 
      TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, highlightColor, TextFormatFlags.GlyphOverhangPadding); 
     } 
     else 
     { 
      e.DrawDefault = true; 
     } 
    } 
0

に登録:

あなたのTを確認してくださいreeViewのHideSelectionはTrue(デフォルト値)に設定されています。

次に扱うツリービューの入力などのイベントまま:リサイズ、ASP:私はC#で3つのツリービュークラスが実際にあることを追加する必要があります私は3日前まで正確に同じ問題で苦労

void myTreeView_Leave(object sender, EventArgs e) 
{ 
    if((sender as TreeView).SelectedNode != null) 
     (sender as System.Windows.Forms.TreeView).SelectedNode.BackColor = Color.Red; //your highlight color 
} 

void myTreeView_Enter(object sender, EventArgs e) 
{ 
    if((sender as TreeView).SelectedNode != null) 
     (sender as TreeView).SelectedNode.BackColor = (sender as TreeView).BackColor; 
} 
関連する問題