天天看點

C# TreeView樹控件,失去焦點仍然高亮顯示,右擊節點時才彈出右鍵菜單,空白處右擊不彈出菜單

http://www.cnblogs.com/Ruiky/archive/2012/01/19/2326222.html

實作的功能(C#的樹控件 - TreeView控件):

1、右擊樹節點所在區域時,才會彈出快捷菜單(右鍵菜單)。

2、樹控件失去焦點時,被選中的節點,仍然高亮顯示。

先看效果:

C# TreeView樹控件,失去焦點仍然高亮顯示,右擊節點時才彈出右鍵菜單,空白處右擊不彈出菜單

圖1 失去焦點時仍然高亮顯示(顔色可以自己設定)

C# TreeView樹控件,失去焦點仍然高亮顯示,右擊節點時才彈出右鍵菜單,空白處右擊不彈出菜單

圖2 隻會在選中的節點右下方彈出菜單

實作方法詳解(有時間再寫):

實作的代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TreeViewDemo

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            //清空

            treeView1.Nodes.Clear();

            //treeView1.HideSelection = false;

            textBox1.Text = "節點";

        }

        //失去焦點時

        private void treeView1_Leave(object sender, EventArgs e)

        {

            if(treeView1.SelectedNode!=null)

            {

                //讓選中項背景色呈現紅色

                treeView1.SelectedNode.BackColor = Color.Red;

                //前景色為白色

                treeView1.SelectedNode.ForeColor = Color.White;

            }

        }

        //滑鼠點選節點時觸發

        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

        {

            //判斷是否是右擊

            if (e.Button == MouseButtons.Right)

            {

                //選中點選的節點

                treeView1.SelectedNode = e.Node;

                //擷取節點區域的右下角坐标值

                Point pos = new Point(e.Node.Bounds.X + e.Node.Bounds.Width, e.Node.Bounds.Y + e.Node.Bounds.Height);

                //在選中的節點的右下角,彈出右鍵菜單,并設定控制者為treeView

                contextMenuStrip1.Show(treeView1, pos);

            }

        }

       //将要選中新節點之前發生

        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)

        {

            if (treeView1.SelectedNode != null)

            {

                //将上一個選中的節點背景色還原(原先沒有顔色)

                treeView1.SelectedNode.BackColor = Color.Empty;

                //還原前景色

                treeView1.SelectedNode.ForeColor = Color.Black;

            }

        }

    }

}