首先,要向窗体添加一个TreeView控件;

然后再添加一个ContextMenuStrip控件;

接下就要给TreeView添加一个MouseDown事件,代码如下:

Example 1

        private void SchemaTreeView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point clickPoint = new Point(e.X, e.Y);
BaseTreeNode currentNode = (BaseTreeNode)this.GetNodeAt(clickPoint);// ((SchemaTreeView)sender).GetNodeAt(ClickPoint);
if (currentNode != null)
{
if (SchemaAssemblyUtility.IsSchemaClass(currentNode.GetCurrentType()))
{
if (currentNode.Level.ToString().Equals("")) // it is a top schema node which its level is zero
{
currentNode.ContextMenuStrip = contextMenuStrip_DeleteRootSchemaNode;
}
this.SelectedNode = currentNode;
} }
} private void contextMenuStrip_DeleteRootSchemaNode_Click(object sender, EventArgs e)
{ TreeNode currentNode = this.SelectedNode;
if (currentNode != null)
{
currentNode.Nodes.Clear();
this.Nodes.Remove(currentNode);
}
else
{
MessageBox.Show("cannot delete a null node!");
}
}

Example 2

http://blog.sina.com.cn/s/blog_685790700100ku5w.html

动态创建ContextMenuStrip并关联到控件的方法如下

 void LoadMenustrip(Control Control)
{
ContextMenuStrip ms = new ContextMenuStrip(); ms.Items.Add("全选(Ctrl+A)");
ms.Items.Add("复制(Ctrl+C)");
ms.Items.Add("粘贴(Ctrl+V)");
ms.Items.Add("删除(Delete)"); ms.ItemClicked += new ToolStripItemClickedEventHandler(ms_ItemClicked);
Control.ContextMenuStrip = ms;
}

调用LoadMenustrip(TheControl)后就会在TheControl上关联一个ContextMenuStrip,同时还为这个ContextMenuStrip的ItemClicked绑定一个事件:ms_ItemClicked,也就是在点菜单上的某一项事引发的事件

ms_ItemClicked 事件处理,在这里sender获得的是这个ContextMenuStrip对象,e获得的是触发事件的Item参数,那么就有很多人在问如何获得触发这个事件的ContextMenuStrip相对应关联的控件呢?(也就是关联这个ContextMenuStrip的那个控件)

其实很简单,ContextMenuStrip有一个属性SourceControl,他就是和这个ContextMenuStrip相关联的那个控件了,类型自己转换一下就可以了。

另外,我没有找到任何获取触发这个事件的Item的索引和其他信息的方法,可以获取文本,但是很多时候我们不可能通过文本判断,因此,我用了直接比对对象的方法,

((ContextMenuStrip)sender).Items[1] == e.ClickedItem

也就是获取ContextMenuStrip本身的各个Item比对触发事件的Item。

除了获取关联控件,代码中的其他代码主要是处理剪贴板,和本文关系不大,不做介绍!

void ms_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
TextBox tb = ((TextBox)((ContextMenuStrip)sender).SourceControl);
if (((ContextMenuStrip)sender).Items[] == e.ClickedItem)
{
tb.SelectAll();
}else if (((ContextMenuStrip)sender).Items[] == e.ClickedItem)
{
Clipboard.SetDataObject(tb.SelectedText);
}else if (((ContextMenuStrip)sender).Items[] == e.ClickedItem)
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))
{
tb.Text += (String)iData.GetData(DataFormats.Text);
}
}else if (((ContextMenuStrip)sender).Items[] == e.ClickedItem)
{
tb.Text = "";
}
}

其实关于控制文本框的复制、粘贴、剪切等 WINFORM的TextBox都有对应的方法,可以不用控制剪贴板,控制剪贴板还要控制光标位置,比较麻烦点。

复制 TextBox.Copy();

粘贴 TextBox.Paste();

剪切 TextBox.Cut();

全选 TextBox.SelectAll();

Winform控件学习-TreeView - ContextMenuStrip的更多相关文章

  1. Winform控件学习-TreeView

    转自 http://www.cnblogs.com/zxlovenet/p/3589425.html      作者: 初行 TreeView控件用来显示信息的分级视图,如同Windows里的资源管理 ...

  2. Winform控件学习笔记【第二天】——常用控件

    背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...

  3. Winform控件学习笔记【第六天】——TreeView

    TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...

  4. Winform控件学习笔记【第四天】——WebBrowser

    常用方法 Navigate(string urlString);//浏览urlString表示的网址 Navigate(System.Uri url);//浏览url表示的网址 Navigate(st ...

  5. WinForm控件学习笔记【第一天】——Control类

    感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...

  6. Winform控件学习笔记【第五天】——ListView

    [第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...

  7. Winform控件学习笔记【第三天】——ListBox

    1. 属性事件列表: SelectionMode    组件中条目的选择类型,即多选(Multiple).单选(Single) Rows             列表框中显示总共多少行 Selecte ...

  8. WinForm控件TreeView 只部分节点显示 CheckBox

    WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...

  9. [工作札记]02: .Net Winform控件TreeView最简递归绑定方法

    前言:Treeview控件是我们在WinForm.WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点:同样,递归的思路在其他程序中也经常运用,包括.Net MVC等. ...

随机推荐

  1. Asp.Net-创建网站的快捷方式到桌面,开始菜单,收藏夹

            /// <summary>         /// 创建快捷方式         /// </summary>         /// <param na ...

  2. 一.CSS工作原理

    CSS全称层叠样式表,它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.是能够真正做到网页表现与内容分离的一种样式设计语言,能够对网页 ...

  3. jQuery - 中文輸入法與KeyDown/KeyPress事件

    最近專案中引用了Telerik ASP.NET擴充元件AutoComplete輸入欄位,測試時發現偶爾會不聽始喚,輸入文字時無法觸發資料查詢,在Javascript Source Code裡反覆追蹤測 ...

  4. 第六十七篇、OC_UITableView head下拉图片放大的效果

    (一) 布置UITableview 我们首先要通过设置UITableview的内容偏移 self.tableView.contentInset 来为图片视图留出位置,这里我们的图片高度暂定为280 ; ...

  5. Spring IoC容器的设计——BeanFactory应用场景

    1.BeanFactory提供的是最基本的IoC容器的功能,关于这些功能定义,我们可以在接口BeanFatory中看到. 2.BeanFactory接口定义了IoC容器最基本的容器的形式,并且提供了I ...

  6. WCF之消息模式

    请求/响应:所有操作的默认行为,在WSDL中表现为Input/Output元素. One_Way. 在WSDL中只有Input,没有回应(Output),所以没有异常报告. 单向操作只会在发出调用的瞬 ...

  7. TCP通信三次握手的过程

    过程 编辑 第一次 第一次握手:建立连接时,客户端 发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号(Synchronize Sequence Nu ...

  8. H.264的一些资料整理

    本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...

  9. ZigBee HA示例程序分析

    ZigBee协议栈中自带的HomeAutomation例程,虽然也是操作灯泡,但是,是通过ZCL来统一处理的,符合HA profile规范,互连互操作性较好.下面就简要分析以下ZCL的使用. 在任务数 ...

  10. 不用Unity库,利用.NET动态代理自己实现AOP

    AOP意为面向切面的程序设计,主要表现为对不同的代码逻辑进行隔离,从而降低不同业务逻辑之间的耦合性,AOP又理解为“横切”,可以在不改变原有实现的情况下,对代码进行拦截和扩展,如果原有设计像一个瓶子, ...