gpt4 book ai didi

c# - TreeView 控件中所选元素的条件着色

转载 作者:行者123 更新时间:2023-11-30 14:50:14 25 4
gpt4 key购买 nike

我有一个TreeView 控件,它包含多个元素、节点。有没有办法根据某些条件更改所选项目的前景色 背景色(默认情况下,蓝色背景和白色前景应用于所选元素)。就我而言,我将检索一个对象并检查其“NeedSync”属性。如果它的值为真,我希望该元素例如,具有绿色背景。如果为假,我希望背景为红色。

我查看了其他类似的线程,但要求使用 TreeView 的 _DrawItem 方法更改未选中元素的颜色。在 WPF 中,这应该可以通过更改控件样式和指定触发器来实现。

这里,在 Windows 窗体中呢?

编辑:我只需更改所选元素的字体颜色或背景颜色,其他一切都应保持不变。有没有办法获取所选节点的默认样式源代码?实现 drawNode 方法会删除可折叠图标、边距和其他一些内容。

最佳答案

如评论中所述,您需要将 DrawMode 属性更改为 OwnerDrawText,然后在 DrawNode 事件中添加类似的内容:

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{
Brush foreColour;
Brush backColour;
if (e.Node.IsSelected)
{
if (e.Node.Text == "Node1")
{
// Special highlight colouring
foreColour = Brushes.Yellow;
backColour = Brushes.Red;
}
else
{
// Default highlight colouring
foreColour = SystemBrushes.HighlightText;
backColour = SystemBrushes.Highlight;
}
}
else {
if (e.Node.Text == "Node1")
{
// Special colouring
foreColour = Brushes.Red;
backColour = Brushes.Yellow;
}
else
{
// Default colouring
foreColour = SystemBrushes.WindowText;
backColour = SystemBrushes.Window;
}
}
e.Graphics.FillRectangle(backColour, e.Bounds);
e.Graphics.DrawString(e.Node.Text, treeView1.Font, foreColour, e.Bounds);
}

(我不知道你想用什么标准,所以我添加了e.Node.Text == "Node1"作为例子。)

注意:如果 TreeView 失去焦点,您可能需要添加额外的(但类似的)逻辑来淡化颜色。

关于c# - TreeView 控件中所选元素的条件着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com