zoukankan      html  css  js  c++  java
  • Winform控件学习-TreeView

    首先,要向窗体添加一个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();

  • 相关阅读:
    linux初始化宏__init, __exit
    linux内核initcall
    常用命令合集
    df
    ln
    cat
    grep
    find
    IE11浏览器传时间格式不兼容,c.a.d.c.advice.AdcDaBaseExceptionAdvice : JSON parse error
    js 图片不保存的回显功能/图片尺寸验证/图片大小验证 /图片类型验证
  • 原文地址:https://www.cnblogs.com/viviancc/p/3938048.html
Copyright © 2011-2022 走看看