|
■No24736 (泥グラマ さん) に返信
> treeViewのノードをクリックした際に選択したノードの色が反転します。
> この反転を行わずに、選択したノードの背景は白のままにしておきたいのですが
> そういったことは可能でしょうか…?
==========================================
(案1) 選択されたら、直ちに選択解除する。
------------------------------------------
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
((TreeView)sender).SelectedNode = null;
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeViewHitTestInfo info = ((TreeView)sender).HitTest(e.Location);
if ((info.Location & TreeViewHitTestLocations.Label) != 0)
{
// テキスト部をクリックした場合のみ反応させる([+]/[-]などには反応させない)
e.Node.ForeColor = Color.Aqua;
}
}
==========================================
(案2) 「選択状態」の描画処理を差し替える。
------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
treeView1.DrawNode += delegate(object o, DrawTreeNodeEventArgs args)
{
args.DrawDefault = ((args.State & TreeNodeStates.Selected) == 0);
if (args.DrawDefault)
{
return;
}
Color backColor = args.Node.BackColor;
Color foreColor = args.Node.ForeColor;
if (backColor == Color.Empty) backColor = ((TreeView)o).BackColor;
if (foreColor == Color.Empty) foreColor = ((TreeView)o).ForeColor;
using (Brush b = new SolidBrush(backColor))
{
args.Graphics.FillRectangle(b, args.Node.Bounds);
}
using (Brush b = new SolidBrush(foreColor))
{
args.Graphics.DrawString(
args.Node.Text,
args.Node.NodeFont ?? ((TreeView)o).Font,
b,
args.Bounds);
}
};
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeViewHitTestInfo info = ((TreeView)sender).HitTest(e.Location);
if ((info.Location & TreeViewHitTestLocations.Label) != 0)
{
// テキスト部をクリックした場合のみ反応させる([+]/[-]などには反応させない)
e.Node.ForeColor = Color.Aqua;
}
}
|