剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象。
不过剪贴板也有限制,它在某个特定的时间只能指向一块内容,每一个随后复制的内容都会取代先前的内容。
为了在C#中操作剪贴板(包括内容的读取和写入)需要使用到System.Windows.Forms.Clipboard类
主要用到Clipboard类的SetDataObject(Object obj,bool copy )方法,此方法是将目标对象放入剪贴板中。
obj就是目标对象,
参数copy表示是否在程序结束时仍然保存对象于剪贴板。如果设置为false,或者不设置,将在程序运行结束后不保留剪切板内容。
Clipboard.SetDataObject(textBox1.Text);
通过以上代码便完成了复制操作。你可以打开文本文档,按下Ctrl+V 看一下效果。
C#的对象的数据结构并不能为剪切板所理解,所以你要把你自定义的数据放到剪切板去的话要把它序列化,在实际操作中,是要你提供一个“可序列化”的对象。
注意:
Main
方法使用 STAThreadAttribute 属性进行标记。下面是个简单的例子:
[Serializable] public class User { public int age { get; set; } public string name { get; set; } } class Program { [STAThread] static void Main(string[] args) { User userIn = new User(); userIn.name = "Jack"; userIn.age = 18; Clipboard.SetData("mydata", userIn); User userOut = (User)Clipboard.GetData("mydata"); Console.WriteLine(userOut.name +" | " + userOut.age); } }
最后要注意的一点是由于这里的数据类型是“mydata”,你也可以指定别的名字,这种类型数据只有你自己的程序能读懂,也就是说,你是不能打开记事本或者Photoshop,直接把你这个User对象贴上去的。
主要用到的方法为:GetDataObject()用来检索剪贴板中的数据,它返回的是任何格式的数据,返回IDataObject接口,用来接收任何数据。
IDataObject iData = Clipboard.GetDataObject(); if (iData.GetDataPresent(DataFormats.Text)) { //如果剪贴板中的数据是文本格式 this.label1.Text = (string)iData.GetData(DataFormats.Text);//检索与指定格式相关联的数据 } else { MessageBox.Show("目前剪贴板中数据不可转换为文本", "错误"); }
if (Clipboard.ContainsImage()) { Image img = Clipboard.GetImage(); pictureBox1.Image = img; }
或者
IDataObject iData = Clipboard.GetDataObject(); if (iData.GetDataPresent(DataFormats.Bitmap)) { this.pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); } else { MessageBox.Show("目前剪贴板中数据不可转换为图片", "错误"); }
另外我们可以利用某些控件自带的paste方法进行粘贴操作,我们这里以richtextbox为例。[注:在使用控件的paste方法之前必须确保控件的readonly属性为false,否则无法对控件进行此操作!]
现在我们就用paste方法来实现向richtextbox中加入图片。
OpenFileDialog fd = new OpenFileDialog(); fd.Filter = "图片文件|*.jpg|所有文件|*.*"; if (fd.ShowDialog() == DialogResult.OK) { Clipboard.SetDataObject(Image.FromFile(fd.FileName), true); DataFormats.Format myFormat = DataFormats.GetFormat(DataFormats.Bitmap); richTextBox2.ReadOnly = false; if (richTextBox2.CanPaste(myFormat))//判断此控件是否可以粘贴这个格式的数据 { richTextBox2.Paste(myFormat); } else { MessageBox.Show("无法粘贴!"); } }
到此这篇关于C#使用Clipboard类实现剪贴板功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。