TreeNode オブジェクトに ForeColor を設定しました。その後、このノードをクリックすると、マウスを離すまで SelectedNode.ForeColor は変更されません。
TreeNode.ForeColor = Color.Red;
ForeColor == Color.Empty を持つすべての TreeNode は、マウス クリックですぐに適切な SelectedNode.ForeColor を取得します。
キーボードを使用して選択を移動すると、期待どおりに機能します。しかし、マウスクリックではありません。ノードの ForeColor を Color.Black などに設定し、最初のマウス クリックで正しい SelectedNode.ForeColor を取得するにはどうすればよいですか?
このように TreeView を埋めます。「色」が追加されたすべての TreeNode オブジェクトで、マウス ダウンで ForeColor (赤) を取得します..マウスの左ボタンを離して適切な白の ForeColor を取得するまで..
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
TreeNode node = new TreeNode("node_" + i);
for (int j = 0; j < 3; j++)
{
TreeNode childNode = new TreeNode("childNode_" + i + j);
if (j==0)
{
childNode.Text += "color";
childNode.ForeColor = Color.Red;
}
node.Nodes.Add(childNode);
}
treeView1.Nodes.Add(node);
}
}
こうすれば..
treeView1.FullRowSelect = false; //if this is true it don't work.. hm!
treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode);
void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DrawDefault = true;
}
できます!うーん。これは、.NET TreeView の既定の動作のバグですか?
そしてもちろん..
//treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
//treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode);
..今は正常に戻っています..そして、働かないでください!! 誰も理由を説明できますか!? ここでは、ノードの左ボタンをクリックすると、青色の背景とノードの ForeColor が取得されます。その上で、マウス ボタンを離すまで待ってから、選択した背景と前部の色を正しくペイントします (私の意見では)。
ノート!FullRowSelect が true の場合。上記の DrawNode コードは機能しません。ノード部分を除くすべての行に青い背景色をペイントします(白くペイントされています)。