Winform控件学习-TreeView - ContextMenuStrip
首先,要向窗体添加一个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的更多相关文章
- Winform控件学习-TreeView
转自 http://www.cnblogs.com/zxlovenet/p/3589425.html 作者: 初行 TreeView控件用来显示信息的分级视图,如同Windows里的资源管理 ...
- Winform控件学习笔记【第二天】——常用控件
背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...
- Winform控件学习笔记【第六天】——TreeView
TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...
- Winform控件学习笔记【第四天】——WebBrowser
常用方法 Navigate(string urlString);//浏览urlString表示的网址 Navigate(System.Uri url);//浏览url表示的网址 Navigate(st ...
- WinForm控件学习笔记【第一天】——Control类
感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...
- Winform控件学习笔记【第五天】——ListView
[第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...
- Winform控件学习笔记【第三天】——ListBox
1. 属性事件列表: SelectionMode 组件中条目的选择类型,即多选(Multiple).单选(Single) Rows 列表框中显示总共多少行 Selecte ...
- WinForm控件TreeView 只部分节点显示 CheckBox
WinForm控件TreeView 只部分节点显示 CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...
- [工作札记]02: .Net Winform控件TreeView最简递归绑定方法
前言:Treeview控件是我们在WinForm.WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点:同样,递归的思路在其他程序中也经常运用,包括.Net MVC等. ...
随机推荐
- [转]GCC参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...
- UI1_UICollectionView
// AppDelegate.m // UI1_UICollectionView // // Created by zhangxueming on 15/7/16. // Copyright (c) ...
- 安装MySQL软件
安装MySQL软件(绿色版) ① 解压软件包 ② 更改文件夹名称为mysql并复制到/usr/local文件夹下 ③ 使用cd指令进入/usr/local/mysql文件夹,使用ls –l查看 查看后 ...
- log4j自动生成日志文件配置
生成文件到默认位置: #生成日志文件 #log4j.appender.systemFile=org.apache.log4j.RollingFileAppender #按天生成 log4j.appen ...
- Java--CJDP
was定义,包定义, 1. Java的接口概念 进行封装,方便的使用 2. 包定义,Java 中多种包,进行迁移使用,包的导入,例如对数据库的操作Hibernate 3. 配置文件xml和json,对 ...
- Repost: Set Delivery Block on SO
If SO is incomplete, then automatically set the delivery block on the SO header. as suggested by ear ...
- Winfrom皮肤样式的使用
IrisSkin类库提供了可供我们使用的设置窗体皮肤的类,简单地说,就是给我们提供了一个皮肤引擎,通过设置皮肤引擎来达到我们想要的窗体界面. 具体的开发步骤: (1)引入IrisSkin.dll文件 ...
- 生成HTMLTestRunner测试报告的操作步骤——Python+selenium自动化
HTMLTestRunner是Python标准库的unittest模块的一个扩展,具体操作如下 1.安装 环境:Window8 步骤:1)http://tungwaiyip.info/software ...
- 如何判断一个js对象是不是Array
1. instance of 2.constructor 3. isArray 1.var a=new Array(); a instanceof Array; //true 2.var a=new ...
- !!! FAILED BINDER TRANSACTION !!! TransactionTooLargeException
- ::): !!! FAILED BINDER TRANSACTION !!! xxxRecorder 运行40多分钟,崩溃,捕获日志 03-12 14:50:12.353: E/JavaBinde ...