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("0"))  // 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[0] == e.ClickedItem)
    {
        tb.SelectAll();
    }else if (((ContextMenuStrip)sender).Items[1] == e.ClickedItem)
    {
        Clipboard.SetDataObject(tb.SelectedText);
    }else if (((ContextMenuStrip)sender).Items[2] == e.ClickedItem)
    {
        IDataObject iData = Clipboard.GetDataObject();
        if (iData.GetDataPresent(DataFormats.Text))
        {
            tb.Text += (String)iData.GetData(DataFormats.Text);
        }    }else if (((ContextMenuStrip)sender).Items[3] == e.ClickedItem)
    {
        tb.Text = "";
    }
}

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

复制 TextBox.Copy();

粘贴 TextBox.Paste();

剪切 TextBox.Cut();

全选 TextBox.SelectAll();

时间: 2024-11-05 19:29:34

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

Winform控件学习-TreeView

转自 http://www.cnblogs.com/zxlovenet/p/3589425.html      作者: 初行 TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成.在建立TreeView控件后,我们可以展开和折叠.显示或隐藏其中的节点.TreeView控件一般用来显示文件和目录结构.

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

WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示checkbox哪些不显示,可是winform中的treeview只提供一个ShowCheckBoxes 属性,要么全部节点显示checkbox,要不全部不显示,而指定节点没有ShowCheckBox 属性,下面就在winform的treeview中实现BS对应CheckBox 属性的功能  方法1: a) 

winform 控件合集2

http://www.cnblogs.com/peterzb/archive/2009/06/18/1505424.html 包含自定义绘制的ListBox, 带拖动,图片显示, 内嵌其它控件, 打印等扩展功能的ListView(文章及相关代码搜集自网络,仅供学习参考,版权属于原作者! ). 1.ColorListBox   ColorListBox.zip 2.RadioListBox   RadioListBox.rar 3.扩展CheckedListBox控件  ExCheckedList

C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开文件和删除文件功能

在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息,但仅仅是显示信息是不够的,我们还需要具体的操作.在"个人电脑使用历史痕迹"项目中我还需要添加"打开文件"和"删除文件"两种方法.具体如下: 在第一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中显示如下: http://blog.csdn.net/eastmount/article/details/1945310

DevExpress控件学习总结(转)

DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们需要把一个不可见的控件(component)BarManager(Navigation&Layout)拖放到这个窗体或用户控件上.这个控件维护工具条在窗体上的布局,处理用户的行为(processes an end-user's actions),提供一些定制功能等等.

C# WinForm控件、自定义控件整理(大全)

转:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar WinForm下CheckedListBox的数据绑定 Winform 下无闪烁走马灯效果实现 c#,winform,progressbar+la

.Net WinForm 控件键盘消息处理剖析

在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每一个方法的具体含义又是什么哪?Win32的键盘消息又是如何到达控件上的这些方法的,本文将着重阐述这些问题,对.Net WinForm控件的键盘消息处理过程进行剖析.  1.      WinForm消息循环 大家都知道WinForm也是依赖于底层的消息机制的,通常我们

通过WinForm控件创建的WPF控件无法输入的问题

今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子后,终于找到了原因:虽然这个程序是个WPF程序,但为了复用之前的部分代码,使用着一个WinForm的菜单控件,后续的子窗口都是通过这个WinForm菜单创建的.而用WinForm控件创建的WPF控件可能出现无法正确响应键盘事件的情况. 找到了原因后,一个常规的解决方法是:将WinForm控件换成WP

C#中WinForm控件的跨线程更新Invoke

目的: 用WinForm(C#)搭建一个用户界面,一个进度条和一个按钮,按钮启动进度条,进度完成时停止更新 示例: 实现: 在按钮事件中设置循环,更新进度条         private void btnProgress_Click(object sender, EventArgs e)         {             for (int ii = 0; ii < 100; ii++)             {                 progressBar1.Value