c# 操作剪贴板[转]

原地址:http://blog.54master.com/index.php/586951/viewspace-20955

在做自己的项目中牵涉到了剪贴板的问题,研究了两天,似乎有所了解,所以写出来供大家参考!
  先引用一下其它高手的话:
  剪贴板是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("无法粘贴!");                   
                }
  }
  
  好了,差不多算是写完了,等以后想起什么再补充吧!

posted @ 2008-11-07 19:45  张永杰  阅读(1172)  评论(0编辑  收藏  举报