Winform控制項學習-TreeView - ContextMenuStrip

來源:互聯網
上載者:User

標籤:des   winform   style   blog   http   color   os   for   ar   

首先,要向表單添加一個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();

Winform控制項學習-TreeView - ContextMenuStrip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.