前言
在做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 、Move 和 Scroll 效果的组合。 |
Copy | 将拖动源中的数据复制到放置目标。 |
Link | 将拖动源中的数据链接到放置目标。 |
Move | 将拖动源的数据移动到放置目标。 |
None | 放置目标不接受该数据。 |
Scroll | 拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。 |
txtMessage_DragEnter作用就是设置目标的放置效果,如果注释掉事件里面的代码,就会出现下面这种情况,并且值没有复制。
txtMessage_DragDrop事件是拖放完成做的操作,从代码中我们可以看出,获取拖放的值并不是从剪切板中取的,而是通过参数传递,也就是一开始lvSource.DoDragDrop(e.Item, DragDropEffects.Copy);在做拖放的时候,我们看下clipbrd.exe程序里并没有拖放的值。