C#使用Clipboard类实现剪贴板功能

 更新时间:2022-06-15 10:08:22   作者:佚名   我要评论(0)

剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象。
不过剪贴

剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象。

不过剪贴板也有限制,它在某个特定的时间只能指向一块内容,每一个随后复制的内容都会取代先前的内容。

为了在C#中操作剪贴板(包括内容的读取和写入)需要使用到System.Windows.Forms.Clipboard类

一、向剪贴板中存放东西。相当于Ctrl+C

主要用到Clipboard类的SetDataObject(Object obj,bool copy )方法,此方法是将目标对象放入剪贴板中。

obj就是目标对象,

参数copy表示是否在程序结束时仍然保存对象于剪贴板。如果设置为false,或者不设置,将在程序运行结束后不保留剪切板内容。

1、存放普通数据

Clipboard.SetDataObject(textBox1.Text);

通过以上代码便完成了复制操作。你可以打开文本文档,按下Ctrl+V 看一下效果。

2、往剪切板里存取自定义数据

C#的对象的数据结构并不能为剪切板所理解,所以你要把你自定义的数据放到剪切板去的话要把它序列化,在实际操作中,是要你提供一个“可序列化”的对象。 
注意:

  • 对象必须是可序列化的(Serializable注解),才能将其放在剪贴板上。 如果将非序列化对象传递到剪贴板方法,则该方法将失败,且不会引发异常。
  • Clipboard 类只能在设置为单线程单元(STA)模式的线程中使用。 若要使用此类,请确保 Main 方法使用 STAThreadAttribute 属性进行标记。
  • 如果数据比较复杂,可以考虑把数据自行序列化到一个Stream对象去,再把Stream对象写入剪切板,获取的时候对Stream对象自行反序列化,还原数据。

下面是个简单的例子:

[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对象贴上去的。

二、从剪贴板读取东西。相当于Ctrl+V

主要用到的方法为:GetDataObject()用来检索剪贴板中的数据,它返回的是任何格式的数据,返回IDataObject接口,用来接收任何数据。

  • IDataObject接口实例的 GetDataPresent (Type Format)方法返回bool值,获取指定类型是否可用。
  • 另外就是DataFormats类,该类主要是用来标识格式用的。
  • 从剪切板上获得数据不影响剪贴板的内容,GetData的返回值是存储在剪贴板上的副本。

1、粘贴文本的方法:

IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))
{
    //如果剪贴板中的数据是文本格式 
    this.label1.Text = (string)iData.GetData(DataFormats.Text);//检索与指定格式相关联的数据 
}
else
{
    MessageBox.Show("目前剪贴板中数据不可转换为文本", "错误");
}

2、粘贴图片:

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("目前剪贴板中数据不可转换为图片", "错误");
 }

3、控件自带的paste方法

另外我们可以利用某些控件自带的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类实现剪贴板功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • C#操作Clipboard读取剪切板中数据实例详解
  • C#实现的Windows剪贴板监视器功能实例【附demo源码下载】
  • C#发送数据到剪贴板及从剪贴板中取数据的方法
  • C#实现windows form拷贝内容到剪贴板的方法
  • C#实现从windows剪贴板获取内容的方法
  • C#从windows剪贴板获取并显示文本内容的方法

相关文章

  • C#使用Clipboard类实现剪贴板功能

    C#使用Clipboard类实现剪贴板功能

    剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象。 不过剪贴
    2022-06-15
  • 面试手写实现Promise.all

    面试手写实现Promise.all

    目录前言常见面试手写系列Promise.resolve简要回顾源码实现Promise.reject简要回顾源码实现Promise.all简要回顾源码实现Promise.allSettled简
    2022-06-15
  • Java中String和StringBuffer及StringBuilder?有什么区别

    Java中String和StringBuffer及StringBuilder?有什么区别

    目录String类为什么是immutable(不可变的)如何保证不可变string类为不可变对象的好处前言: String 是 Java 语言非常基础和重要的类,提供了
    2022-06-15
  • C#实现读写CSV文件的方法详解

    C#实现读写CSV文件的方法详解

    目录CSV文件标准文件示例RFC 4180简化标准读写CSV文件使用CsvHelper使用自定义方法总结项目中经常遇到CSV文件的读写需求,其中的难点主要是C
    2022-06-15
  • 一次性彻底讲透Python中pd.concat与pd.merge

    一次性彻底讲透Python中pd.concat与pd.merge

    目录数据拼接:pd.concat数据关联:pd.merge两者区别数据的合并与关联是数据处理过程中经常遇到的问题,在SQL、HQL中大家可能都有用到 join、
    2022-06-15
  • Python利用PyAutoGUI模块实现控制鼠标键盘

    Python利用PyAutoGUI模块实现控制鼠标键盘

    目录前言1、鼠标的相关控制2、键盘的相关控制前言 PyAutoGUI是一个简单易用,跨平台的可以模拟键盘鼠标进行自动操作的python库。 使用pip的方
    2022-06-15
  • 详解Android中motion_toast的使用

    详解Android中motion_toast的使用

    目录前言motion_toast 介绍示例最简单用法其他内置的提醒自定义 toast总结前言 我们通常会用 toast(也叫吐司)来显示提示信息,例如网络请求
    2022-06-15
  • Element如何实现loading的方法示例

    Element如何实现loading的方法示例

    目录前言使用 loading 的几种方式loading 指令实现指令通过指令来创建 loading代码实现directive创建 loading 实例loading 动画其他 loading
    2022-06-15
  • PTC Creo Schematics 9.0.0.0 中文授权激活版 Win64

    PTC Creo Schematics 9.0.0.0 中文授权激活版 Win64

    PTC Creo Schematics 9.0.0.0 中文授权激活版 Win64,PTC Creo Schematics 9.0中文破解版是一款领先的布线图软件,用于创建布线系统(如电缆、管道、HVAC 和液压系统)的 2D 示意图。该软件可根据 Creo Parametric 和 Creo Elements/Direct 中的现有 2D 原理图自动创建详细的 3D 布线系统设计
    2022-06-11
  • Adobe Substance 3D Designer 2021 V12.1.1 中文/英文破解版(附安装教程)

    Adobe Substance 3D Designer 2021 V12.1.1 中文/英文破解版(附安装教程)

    Adobe Substance 3D Designer 2021 V12.1.1 中文/英文破解版(附安装教程),Substance 3D Designer 2021是一个Adobe发布Substance 3D系列创作软件之一,可创建无缝的素材和图案、图像滤镜、环境光,甚至 3D 模型,是大多数电子游戏和视觉效果素材管道所用的核心工具,这里提供最新中文英文版下载
    2022-06-11

最新评论