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

剪贴板是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类实现剪贴板功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript之clipboard用法详解

    (1)介绍: clipboard.js是一款轻量级的实现复制文本到剪贴板功能的JavaScript插件.通过该插件可以将输入框,文本域,DIV元素中的文本等文本内容复制到剪贴板中 clipboard.js支持主流的浏览器:chrome 42+; Firefox 41+; IE 9+; opera 29+; Safari 10+; (2)clipboard复印内容的方式有 从target复印目标内容 通过function 要复印的内容 通过属性返回复印的内容 target复印目标内容,这里不说,就

  • 解析Clipboard API剪贴板操作实例

    目录 简介 Document.execCommand() 方法 异步 Clipboard API Clipboard 对象 Clipboard.readText() Clipboard.read() Clipboard.writeText() Clipboard.write() 简介 浏览器允许 JavaScript 脚本读写剪贴板,自动复制或粘贴内容. 一般来说,脚本不应该改动用户的剪贴板,以免不符合用户的预期.但是,有些时候这样做确实能够带来方便,比如“一键复制”功能,用户点击一下按钮,指定

  • 易语言调用SetClipboardViewer的api实现剪贴版的内容监控

    DLL命令表 .版本 2 .DLL命令 加入剪贴板监视链_d, 整数型, "user32.dll", "SetClipboardViewer", 公开, 成功,返回值将标识剪贴板查看器链中的下一个窗口.如果出现错误或剪贴板查看器链中没有其他窗口,则返回值为空.( hwndNextViewer 将为 NULL.) .参数 窗口句柄, 整数型, , hwnd 加入剪切板监视链中窗口句柄 .DLL命令 设置窗口信息_d, 整数型, "user32",

  • clipboard.js使用总结

    目录 (1)介绍: (2)clipboard复印内容的方式有 (3)Function操作有两种: (4)通过属性返回复印的内容 (5)函数和属性的兼容方式 (1)介绍: clipboard.js是一款轻量级的实现复制文本到剪贴板功能的JavaScript插件.通过该插件可以将输入框,文本域,DIV元素中的文本等文本内容复制到剪贴板中 clipboard.js支持主流的浏览器:chrome 42+; Firefox 41+; IE 9+; opera 29+; Safari 10+; (2)cli

  • js复制文本到粘贴板(Clipboard.writeText())

    目录 复制文本到粘贴板(Clipboard.writeText()) 网上的代码 clipboard.js Clipboard.writeText() 复制内容到剪贴板(无插件,兼容所有浏览器) 复制文本到粘贴板(Clipboard.writeText()) js如何复制文本到粘贴板呢,网上所说的各种复制..在Chrome或者说在我这个项目都没用. windows.copy document.execCommand(“copy”); clipboard.js Clipboard.writeTex

  • 使用clipboard.js库实现复制剪切功能

    项目地址:https://github.com/zenorocha/clipboard.js 现代化的“复制到剪切板”插件.不包含 Flash.gzip 压缩后仅 3kb. 为什么使用它 复制文字到剪切板不应该很难去实现.它不需要配置几十个步骤或者加载几百 KB 的文件.最重要的是,它不应该依赖 Flash 或其他臃肿的框架. 这是 clipboard.js 诞生的原因. 安装 你可以通过 npm 来安装它. npm install clipboard --save 如果你不使用包管理,仅需要下

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

    剪贴板是Windows操作系统中最常用的功能之一,它用来从一个应用程序向另一个应用程序传递数据,可以是文本,图象,甚至是程序对象. 不过剪贴板也有限制,它在某个特定的时间只能指向一块内容,每一个随后复制的内容都会取代先前的内容. 为了在C#中操作剪贴板(包括内容的读取和写入)需要使用到System.Windows.Forms.Clipboard类 一.向剪贴板中存放东西.相当于Ctrl+C 主要用到Clipboard类的SetDataObject(Object obj,bool copy )方法

  • Android开发之ClipboardManager剪贴板功能示例

    本文实例讲述了Android开发之ClipboardManager剪贴板功能.分享给大家供大家参考,具体如下: 在开发一些系统应用的时候,我们可以需要用到Android的剪贴板功能,比如将文本复制到剪贴板或者从剪贴板复制数据等操作.使用起来很简单,系统给我们提供了很方便的接口,如下所示: //获取剪贴板管理服务 ClipboardManager cm =(ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);

  • js实现点击复制当前文本到剪贴板功能(兼容所有浏览器)

    最近做项目时,在网站框架搭建过程,有一个功能需要实现复制文本到剪贴板,相信这个功能很常用,但是对于不常写JS代码的我来说是一个比较大的挑战,回想以前做过的一个站点,使用window.clipboardData实现复制到剪贴板功能,也仅仅支持IE和FF浏览器,当时在百度找个几个方案,看不下去就放弃了,后来在代码中做了判断,如果不支持该属性,就直接alert:此功能不支持该浏览器,请手工复制文本框中内容.有没有人遇到同样情况? alert("此功能不支持该浏览器,请手工复制文本框中内容")

  • JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能会更大.成长以来,很多朋友也听说到不少激励自己上进的话,但不是每个人都能一直坚持做下来,其实,这个跟自己的性格以及周围的环境都有很大关系,只能说多找方法.条件给自己鼓励,不断提高对自己的要求,才有机会获得多一点的成就. 今年下半年打算在组内建个叫『移动开发指南』的站点,在网站框架搭建过程,有一个功能

  • PHP上传图片类显示缩略图功能

    有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下 <form action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" ><input type="text" name="name" /><input type="file&q

  • PHP实现的文件操作类及文件下载功能示例

    本文实例讲述了PHP实现的文件操作类及文件下载功能.分享给大家供大家参考,具体如下: 文件操作类: <?php // Copyright 2005, Lee Babin (lee@thecodeshoppe.com) // This code may be used and redistributed without charge // under the terms of the GNU General Public // License version 2.0 or later -- www

  • Java使用excel工具类导出对象功能示例

    本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFSheet; import

  • String类的获取功能、转换功能

    String类的获取功能:String类的基本获取功能.获取功能的举例子.String类的基本转换功能.转换功能的举例子. 1.String类的获取功能: (1)int length() 获取字符串的长度,即字符串中字符的个数. (2)char charAt(int index) 获取指定索引位置上的字符. (3)int indexOf(int ch) 获取指定字符在此字符串中第一次出现的索引.注意:这里用的是int,不是char,原因是'a'和97都可以作为实参传入. (4)int index

  • Django实现基于类的分页功能

    开发个人博客时往往避免不了分页功能的实现,实现方法大体上分为函数和类两种.本文基于类实现分页功能,以下是详细代码: class Page: page_num = 0 total_count = 0 tartype = "" total_page = 0 # 总页数 per_page = 8 # 每页显示8篇文章 max_page = 11 # 每页最大展示页数选项 half_page = max_page // 2 category = "" # 标记该链接所属分类

  • JDBC工具类实现登录功能

    本文实例为大家分享了JDBC工具类实现登录功能的具体代码,供大家参考,具体内容如下 我们使用JDBC实现数据库的增删改查,代码基本差不多,有很多重复,所以我们可以把这些重复的代码写成一个工具类,使用的时候直接调用就可以了.下面以实现登录功能的案例来介绍. 创建数据库,插入数据 use student; create table user( id int primary key auto_increment, username varchar(32), password varchar(32) )

随机推荐