web-dev-qa-db-ja.com

WinForms TreeView-(クリックされたように)ノードを手動で「ハイライト」する方法

ユーザーがクリックしたように、プログラムで選択されたノードを「選択された」状態でグラフィカルに作成する方法を知る必要があります。 SelectedNodeは、これを内部的にのみ選択します。どうもありがとうございました!

23
Petr

ハイライト表示されない理由は、ツリービューにフォーカスがないためです。これは私のテストフォームのボタンクリックイベントにあります。

_TreeView1.SelectedNode = TreeView1.Nodes(2);
TreeView1.Focus();
_

これにより、ノードが適切に強調表示されます。 Focus();呼び出しを削除した場合、ツリービュー(ツリービュー内の任意の場所、必ずしも選択する必要のあるノードではない)をクリックするまで、強調表示されません。

35
Pondidum
TreeView1.SelectedNode.BackColor = SystemColors.HighlightText; // This will work

上記のソリューションはそれに焦点を当てるだけで、ハイライト表示は変更しません。

4
Mohit Agarwal

これは私にとって.net 3.5で機能します。treeviewコンポーネントのDrawModeプロパティを次のように設定します。OwnerDrawAll次にDrawNodeイベントで次のように記述します。

 if (((e.State & TreeNodeStates.Selected) != 0) && (!MyTreeView.Focused))
     e.Node.ForeColor = Color.Blue;
else
     e.DrawDefault = true;

そしてBeforeSelectイベントでは:

if (MyTreeView.SelectedNode != null)
    MyTreeView.SelectedNode.ForeColor = Color.Black;
e.Node.ForeColor = Color.Blue;
3
Samball

これが私が働かせるものです:

void myProcedure()
{
  // Hookup a DrawMode Event Handler
  this.myTV.DrawNode += myTV_DrawNode;
  // Set DrawMode and HideSelection
  this.myTV.DrawMode = TreeViewDrawMode.OwnerDrawText;
  this.myTV.HideSelection = false;

  // Make sure the TreeView has Focus
  this.myTV.Focus();
  // Make sure the TreeView is Selected
  this.myTV.Select();
  // If the TreeView has a Node, I want to select the first Node to demonstrate.
  if (this.myTV.Nodes.Count > 0)
  {
    // Make sure the node is visible
    this.myTV.Nodes[0].EnsureVisible();
    // Make sure the Node is Selected
    this.myTV.SelectedNode = myTV.Nodes[0];
  }
  // Make sure the SelectedNode IS the Node that we programmatically want to select.
  textBox1.Text = this.myTV.SelectedNode.Text;
  // if we display sanityCheck1 string, it actually is the correct node.text
  // Make sure .NET runtime knows the Node is selected
  textBox1.Text += "  is Selected = " + this.myTV.SelectedNode.IsSelected.ToString();
}

フォローアップ:laalto TreeView.Nodeをハイライトする方法に回答しました。 samballの回答から抜粋したDrawNodeイベントハンドラーの次のコードは、選択状態に基づいてTreeView.Nodeを適切に強調表示します。

private void myTV_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
  // first, let .NET draw the Node with its defaults
  e.DrawDefault = true;
  // Now update the highlighting or not
  if (e.State == TreeNodeStates.Selected)
  {
    e.Node.BackColor = SystemColors.Highlight;
    e.Node.ForeColor = SystemColors.HighlightText;
  }
  else
  {
    e.Node.BackColor = ((TreeView)sender).BackColor;
    e.Node.ForeColor = ((TreeView)sender).ForeColor;
  }
}

プラットフォーム= Windows 10、Visual Studio 2015のC#.NET 4.5

1
gridtrak

私はそれがあなたに役立つかどうかはわかりませんが、ページのタブオーダーをチェックし、ツリービューコントロールが0のタブオーダーを持っていることを確認してください

1
OOZ
TreeView1.SelectedNode = TreeView1.Nodes(2);
this.ActiveControl = TreeView1;

これは私のために働きます(.net 4.7)

0

基礎となるWin32コントロールはこれをサポートします(TVIS_DROPHILITED)ですが、TreeViewコントロールを介して公開されている同じ機能を見ることができません。

Theranemanが言うように、TreeNode.ForeColorおよびBackColorプロパティ...

0
Tim Robinson

同様の問題があり、TreeViewノードを選択(強調表示)したいと思いましたフォームの読み込み時。多分誰かも同じ問題を抱えています。

私は最初にポンディダムの解決策を試しました。成功なし。しかし、私は別のスレッドで解決策を見つけました:TabIndexTreeViewを0に設定するだけです。その場合、フォーカスを設定する必要はありませんです。 SelectedNodeを使用して選択するノードを選択し、TabIndexを設定するだけです。それでおしまい。

0
Anonymous