c# 剪贴板操作

来源:互联网 发布:python 汉字转unicode 编辑:程序博客网 时间:2024/06/11 06:32

先引用一下其它高手的话:  剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象。不过剪贴板也有限制,它在某个特定的时间只能指向一块内容,每一个随后复制的内容都会取代先前的内容。为了在C#中操作剪贴板(包括内容的读取和写入)需要使用到System.Windows.Forms.Clipboard类  接下来我们就通过程序向剪贴板中存放些东西。  这里我们主要用到Clipboard类的SetDataObject(Object obj,bool copy )方法,此方法是将目标对象放入剪贴板中,obj就是目标对象,参数copy表示是否在程序结束时仍然保存对象于剪贴板。  现在我们来看网上一个简单的实例:  

private void button2_Click(object sender, System.EventArgs e)   

{    

    if (this.textBox1.Text == "")    

       {    

         MessageBox.Show("Copy之前必须输入数据","错误");  

        return;    

       }   

  else   Clipboard.SetDataObject(this.textBox1.Text , true);  

}   

通过以上代码便完成了复制操作。你可以打开文本文档,按下Ctrl+V 看一下效果。  我们已经学会了如何复制,现在我们来利用程序实现粘贴操作。  粘贴操作我们主要用到的方法为:GetDataObject()用来检索剪贴板中的数据,它返回的是任何格式的数据,我们用IDataObject (它是一个接口,用来提供传送任何数据的机制)来接收。IDataObject接口实例的GetDataPresent (Type Format)方法返回bool值,用来确定实例中所存储的数据是否与所给格式相关联,或者可以相转化。另外就是DataFormats类,该类主要是用来标识格式用的。  粘贴文本的方法(摘自网上):  

private void button1_Click(object sender, System.EventArgs e)   

{    

IDataObject iData = Clipboard.GetDataObject();  

if (iData.GetDataPresent(DataFormats.Text))

{//如果剪贴板中的数据是文本格式

 this.label1.Text = ( string ) iData.GetData(DataFormats.Text);//检索与指定格式相关联的数据

}

else

{ MessageBox.Show("目前剪贴板中数据不可转换为文本","错误"); }

}    

private void button2_Click(object sender, System.EventArgs e)  

 {

IDataObject iData = Clipboard.GetDataObject();

if (iData.GetDataPresent(DataFormats.Bitmap))

{

this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

this.pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap);

 }

 else

{

 MessageBox.Show("目前剪贴板中数据不可转换为图片","错误");

 }

 }   

另外我们可以利用某些控件自带的paste方法进行粘贴操作,我们这里以richtextbox为例。[注:在使用控件的paste方法之前必须确保控件的readonly属性为false,否则无法对控件进行此操作!]   现在我们就用paste方法来实现像richtextbox中加入图片。 

private void button5_Click(object sender, EventArgs e)

 { 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("无法粘贴!");

 }  

 }   

0 0