日期:2014-06-10  浏览次数:20701 次

前言

  在做winform项目的时候有时候会用到复制粘贴,在.net中提供了Clipboard类来操作剪切板,我们来看下。

clipbrd.exe

  clipbrd是系统剪切板程序,但是在vista及以上程序不提供,我们需要网上下载一个并复制到System32目录下。

  直接在运行里面敲入”clipbrd“命令就可以打开clipbrd剪切板程序。

  可以直接复制一些文字,clipbrd程序会实时的显示出来。

Clipboard类

  关于Clipboard类文本复制粘贴主要使用方法:Clipboard.SetText、Clipboard.ContainsText和Clipboard.GetText,分别是设置文本、判断文本存在和获取文本。我们看个示例:

 1         /// <summary>
 2         /// 复制
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void button1_Click(object sender, EventArgs e)
 7         {
 8             if (!textBox1.SelectedText.Equals(""))
 9                 Clipboard.SetText(textBox1.SelectedText);
10             else
11                 MessageBox.Show("未选中文本!");
12         }
13 
14         /// <summary>
15         /// 粘贴
16         /// </summary>
17         /// <param name="sender"></param>
18         /// <param name="e"></param>
19         private void button2_Click(object sender, EventArgs e)
20         {
21             if (Clipboard.ContainsText())
22                 textBox2.Text = Clipboard.GetText();
23             else
24                 MessageBox.Show("剪切板没有文本!");
25         }

  运行结果:

  上面说的是剪切板的文本复制,Clipboard类也支持图片复制粘贴,提供的静态方法是:Clipboard.SetImage、Clipboard.ContainsImage和Clipboard.GetImage,图片复制粘贴的使用方法和文本复制粘贴一样,参考上面的代码就行。GetImage方法返回的是Image对象。

拖放复制

  平常我们复制粘贴都是Ctrl+C/Ctrl+V,但是这种操作会比较繁琐,我们想利用鼠标就可以快速的复制粘贴,这种在winform中是可以实现的,我们看下示例:

 1         private void lvSource_ItemDrag(object sender, ItemDragEventArgs e)
 2         {
 3             lvSource.DoDragDrop(e.Item, DragDropEffects.Copy);
 4         }
 5 
 6         private void txtMessage_DragEnter(object sender, DragEventArgs e)
 7         {
 8             e.Effect = DragDropEffects.Copy;
 9         }
10 
11         private void txtMessage_DragDrop(object sender, DragEventArgs e)
12         {
13             ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
14             txtMessage.Text = lvi.Text;
15 
16             lvSource.Items.Remove(lvi);
17         }

  我们做的示例是拖放ListView中的项复制到TextBox中,lvSource_ItemDrag事件在拖放项时发生,lvSource.DoDragDrop(e.Item, DragDropEffects.Copy);这句代码的意思是开始拖放操作:传递数据(要复制的值)和设置拖放操作效果DragDropEffects是枚举类型:

成员名称说明
All Copy 、MoveScroll 效果的组合。
Copy 将拖动源中的数据复制到放置目标。
Link 将拖动源中的数据链接到放置目标。
Move 将拖动源的数据移动到放置目标。
None 放置目标不接受该数据。
Scroll 拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。

  txtMessage_DragEnter作用就是设置目标的放置效果,如果注释掉事件里面的代码,就会出现下面这种情况,并且值没有复制。

  txtMessage_DragDrop事件是拖放完成做的操作,从代码中我们可以看出,获取拖放的值并不是从剪切板中取的,而是通过参数传递,也就是一开始lvSource.DoDragDrop(e.Item, DragDropEffects.Copy);在做拖放的时候,我们看下clipbrd.exe程序里并没有拖放的值。

  运行结果:

 

  程序下载:剪切板和拖放复制.rar

  附录:小菜学习编程-Winform系列(初学者)