双击treeView的节点时使不展开不折叠子节点
有時候我們對樹控件的雙擊默認操作不太滿意,比如我們在雙擊一有子節點的節點的時候不希望打開或關閉它的子節點而想執行一個特定的操作,這時怎么來寫呢,我這里有一個辦法可以做到這一點:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data; namespace TreeViewS
{
/// <summary>
/// Form1 的摘要說明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
? private System.Windows.Forms.TreeView treeView1;
?? /// <summary>
?? /// 必需的設計器變量。
?? /// </summary>
? private System.ComponentModel.Container components = null; ? public Form1()
?? {
??? //
??? // Windows 窗體設計器支持所必需的
??? //
??? InitializeComponent(); ?? //
??? // TODO: 在 InitializeComponent 調用后添加任何構造函數代碼
??? //
?? } ?? /// <summary>
?? /// 清理所有正在使用的資源。
?? /// </summary>
? protected override void Dispose( bool disposing )
?? {
??? if( disposing )
??? {
??? if (components != null)
???? {
????? components.Dispose();
???? }
??? }
?? base.Dispose( disposing );
?? } ? #region Windows 窗體設計器生成的代碼
?? /// <summary>
?? /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
?? /// 此方法的內容。
?? /// </summary>
? private void InitializeComponent()
?? {
?? this.treeView1 = new System.Windows.Forms.TreeView();
?? this.SuspendLayout();
?? //
??? // treeView1
??? //
?? this.treeView1.ImageIndex = -1;
?? this.treeView1.Location = new System.Drawing.Point(8, 8);
?? this.treeView1.Name = "treeView1";
?? this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
????????????????????? new System.Windows.Forms.TreeNode("節點0"),
????????????????????? new System.Windows.Forms.TreeNode("節點1", new System.Windows.Forms.TreeNode[] {
?????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點0", new System.Windows.Forms.TreeNode[] {
???????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點1", new System.Windows.Forms.TreeNode[] {
????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點2", new System.Windows.Forms.TreeNode[] {
?????????????????????????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點8")})}),
???????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點3", new System.Windows.Forms.TreeNode[] {
????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點4", new System.Windows.Forms.TreeNode[] {
?????????????????????????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點9")})}),
???????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點5", new System.Windows.Forms.TreeNode[] {
????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點6", new System.Windows.Forms.TreeNode[] {
?????????????????????????????????????????????????????????????????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點7")})})})}), new System.Windows.Forms.TreeNode("節點2", new System.Windows.Forms.TreeNode[] {
?????????????????????????????????????????? new System.Windows.Forms.TreeNode("節點0")}),
????????????????????? new System.Windows.Forms.TreeNode("節點3")});
?? this.treeView1.SelectedImageIndex = -1;
?? this.treeView1.Size = new System.Drawing.Size(216, 232);
?? this.treeView1.TabIndex = 0;
?? this.treeView1.Click += new System.EventHandler(this.treeView1_Click);
?? this.treeView1.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeCollapse);
?? this.treeView1.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeExpand);
??? //
??? // Form1
??? //
?? this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
?? this.ClientSize = new System.Drawing.Size(256, 266);
?? this.Controls.Add(this.treeView1);
?? this.Name = "Form1";
?? this.Text = "Form1";
?? this.ResumeLayout(false); ?? }
?? #endregion?? /// <summary>
?? /// 應用程序的主入口點。
?? /// </summary>
?? [STAThread]
? static void Main()
?? {
??? Application.Run(new Form1());
?? }? private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
?? {
?? string path = null;??? TreeNode node = this.treeView1.SelectedNode;
?? if (node != null)
??? {
???? path = node.Text;
??? while (node.Parent != null )
???? {
????? node = node.Parent;
????? path = node.Text + "\\"+ path;
???? }
??? }
?? }? private bool tmpBool;//用來決定是否打開或關閉樹的節點? private void treeView1_Click(object sender, System.EventArgs e)
?? {
?? object tmpObj = this.treeView1.GetNodeAt(this.treeView1.PointToClient(Cursor.Position));
?? if (tmpObj!=null)
??? {
??? if ((tmpObj as TreeNode).Bounds.Contains(this.treeView1.PointToClient(Cursor.Position)))
???? {
????? tmpBool = true;
???? }
??? }
?? }? private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
?? {
?? if (tmpBool)
??? {
???? e.Cancel = tmpBool;
??? }
??? tmpBool = false;
?? }
? private void treeView1_BeforeCollapse(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
?? {
?? if (tmpBool)
??? {
???? e.Cancel = tmpBool;
??? }
??? tmpBool = false;
?? }
}
}
?
轉載于:https://blog.51cto.com/gswxr/716951
總結
以上是生活随笔為你收集整理的双击treeView的节点时使不展开不折叠子节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flex的事件(十四)
- 下一篇: Type mismatch: canno