C#中的Clipboard与ContextMenuStrip应用举例
今天,突然想起了怎樣在一個文本中實現(xiàn)復(fù)制、剪切與粘貼的功能,并給這些功能添加右鍵的快捷方式。于是,就用自己的VS2008寫了一個簡單的小應(yīng)用,以熟悉C#中剪貼板與快捷菜單的使用。
首先,我們不難發(fā)現(xiàn),剪貼板大致上有復(fù)制、粘貼和剪切三個功能。
復(fù)制,就是將選定的內(nèi)容復(fù)制到內(nèi)存當(dāng)中;粘貼,則將內(nèi)存中的數(shù)據(jù)寫到所選中的區(qū)域或容器上,如文本區(qū)TextArea中,C#語言則往往是RichTextBox;剪切,可以把選定的內(nèi)容復(fù)制到內(nèi)存中,并清除掉這些選中的東西。
那么三個功能的實現(xiàn)我們可以大致這樣定義:
復(fù)制:選中+存儲
粘貼:選中+取出
剪切:選中+存儲+清除
接著,我們可以考慮快捷菜單的設(shè)計,這種菜單屬于彈出式菜單,點擊鼠標(biāo)右鍵可以將該菜單調(diào)出來。在C#中就是ContextMenuStrip,在Java中貌似叫PopedMenu。
最后將上述兩者結(jié)合起來,制作一個包含了復(fù)制、粘貼和剪切功能的快捷菜單。按照一般軟件的設(shè)計,當(dāng)剪貼板中沒有內(nèi)容時,“粘貼”一項應(yīng)該呈灰色,標(biāo)識不可用。
用C#對上述內(nèi)容進行實現(xiàn),寫了一個很簡單的程序:
這時候,剪貼板上沒有東西,所以“粘貼”一項不可用。
對內(nèi)容進行復(fù)制、粘貼或剪切粘貼,則粘貼功能被激活:
給出部分程序代碼,不當(dāng)之處請大家指正。
????
????///?剪貼板和快捷菜單示例
????///?</summary>
????public?partial?class?SampleClipBoard?:?Form
????{
????????///?<summary>
????????///?構(gòu)造方法
????????///?</summary>
????????public?SampleClipBoard()
????????{
????????????InitializeComponent();
????????}
????????
?///?<summary>
????????///?復(fù)制編輯區(qū)上的一段文字到剪切板
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?tsmiCopy_Click(object?sender,?EventArgs?e)
????????{
????????????Clipboard.SetDataObject(richTextBox.SelectedText);
????????}
????????///?<summary>
????????///?粘貼一段文字到選定區(qū)域
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?tsmiPaste_Click(object?sender,?EventArgs?e)
????????{
????????????IDataObject?data;
????????????data?=?Clipboard.GetDataObject();
????????????//如果數(shù)據(jù)為文本,則使用其指定的RichTextBox文本
????????????if?(data.GetDataPresent(DataFormats.Text))
????????????{
????????????????richTextBox.SelectedText?=?data.GetData(DataFormats.Text).ToString();
????????????}
????????}
????????///?<summary>
????????///?將選定的內(nèi)容剪切到剪貼板
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?tsmiCut_Click(object?sender,?EventArgs?e)
????????{
????????????Clipboard.SetDataObject(richTextBox.SelectedText);
????????????richTextBox.SelectedText?=?"";
????????}
????????///?<summary>
????????///?快捷菜單打開時的狀態(tài)設(shè)定方法
????????///?<para>若剪貼板中內(nèi)容為空,則粘貼選項失效。</para>
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?contextMenuStrip_Opening(object?sender,?CancelEventArgs?e)
????????{
????????????if?(!Clipboard.ContainsData(DataFormats.Text))
????????????{
????????????????tsmiPaste.Enabled?=?false;
????????????}
????????????else
????????????{
????????????????tsmiPaste.Enabled?=?true;
????????????}
????????}
????}
?
?
最后,還有一個值得注意的問題,那就是快捷菜單要顯示出來,必須以某一容器為框架,也就是說,某個容器要能彈出菜單,則必須在其ContextMenuStrip一欄填上ContextMenuStrip類的對象名稱。
例如這里的richTextBox中的ContextMenuStrip屬性,選擇了一個快捷菜單:
?
對于快捷菜單的更多內(nèi)容,我們可以右擊ContextMenuStrip的某個控件,選擇當(dāng)中的編輯項,編輯更多的屬性。而進行C#開發(fā)時參考MSDN,則是十分重要。
轉(zhuǎn)載于:https://www.cnblogs.com/jhxk/articles/2236242.html
總結(jié)
以上是生活随笔為你收集整理的C#中的Clipboard与ContextMenuStrip应用举例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用谷歌云盘生成直接下载的url
- 下一篇: C# 与java区别总结 收集