C# TreeView树控件,失去焦点仍然高亮显示,右击节点时才弹出右键菜单,空白处右击不弹出菜单...
时间: 2023-07-07 11:46:04 浏览: 163
treeview失去焦点后选中节点扔高亮显示
5星 · 资源好评率100%
要实现失去焦点仍然高亮显示,可以在TreeView控件的DrawMode属性中选择OwnerDrawAll,然后在DrawNode事件中自定义节点的绘制方式,包括选中和非选中状态的绘制。具体实现可以参考以下代码:
```
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
// 绘制背景色
Color bgColor = e.Node.IsSelected ? SystemColors.Highlight : SystemColors.Window;
using (SolidBrush brush = new SolidBrush(bgColor))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
// 绘制文本
TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, SystemColors.WindowText,
TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine);
// 绘制焦点框
if (e.Node.IsSelected)
{
ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds);
}
}
```
要实现右击节点时才弹出右键菜单,可以在TreeView控件的MouseDown事件中判断鼠标点击的位置是否在节点上,如果是则显示右键菜单。具体实现可以参考以下代码:
```
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode clickedNode = treeView1.GetNodeAt(e.Location);
if (clickedNode != null && clickedNode.Bounds.Contains(e.Location))
{
contextMenuStrip1.Show(treeView1, e.Location);
}
}
}
```
要实现空白处右击不弹出菜单,可以在TreeView控件的MouseDown事件中判断鼠标点击的位置是否在节点上,如果不是则取消右键菜单的显示。具体实现可以参考以下代码:
```
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode clickedNode = treeView1.GetNodeAt(e.Location);
if (clickedNode != null && clickedNode.Bounds.Contains(e.Location))
{
contextMenuStrip1.Show(treeView1, e.Location);
}
else
{
e.Cancel = true;
}
}
}
```
阅读全文