Visual C#的剪切板编程

2016-02-19 17:07 0 1 收藏

下面是个超简单的Visual C#的剪切板编程教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

  Visual C#是微软.Net框架中的一个重要的程序开发语言,虽然在.Net框架中还有其他的程序开发语言,但微软似乎对Visual C#更喜爱有加。这同时也就决定了Visual C#在.Net框架中的地位,以及他以后的发展前途。由于针对剪切板方面的编程始终是程序设计的一个重点,当然也可以算是一个难点。本文将探讨如何利用Visual C#进行剪切板编程。本文将结合二个具体的程序例子来介绍Visual C#剪切板编程的二个重要方面:判定剪切板中的数据类型、保存剪切板中的数据。首先来介绍Visual C#如何判定剪切板中的数据类型的。

  剪切板中可以存放许多类型的数据,而Visual C#可以判定剪切板中的数据类型大致有21种,这其中包括位图(Bitmap)、文本(Text)、超文本(Html)等,由于类型比较将多,本文将只介绍比较典型的数据类型,对于其他的数据类型,操作方法基本类似。

  一. 本文程序设计和运行的环境:

  (1).微软公司视窗2000服务器版

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  (2)..Net FrameWork SDK Beta 2

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  二. 介绍程序中使用到的类和接口:

  Visual C#判断剪切板中的数据类型,要使用到.Net FrameWork SDK中二个类(Class)和一个接口(Interface),具体的就是:Clipboard类、DataFormats类和IdataObject接口。这三者的作用是:Clipboard类是一个不可以继承的类,他的主要作用是通过自身的方法来实现在计算机系统的剪切板中存放和获得数据。DataFormats类主要是提供了一个预先设定好的剪切板数据类型,并可以被IdataObject接口调用来判定剪切板数据类型。IdataObject接口提供了一个自由格式的装置来传输数据。下面就结合这些类和接口来具体看一下,具体的使用方法。

  三. Visual C#判定剪切板数据类型的解决思路以及重要步骤的解决办法:

  (1).首先要读取剪切板中的数据内容:

  Clipboard类中有一个方法叫GetDataObject ( ),此方法的作用就是读取当前剪切板中的数据内容。要把读取了当前剪切板中数据存放起来,这就要用到IdataObject接口,这个接口可以使用在Clipboard类和Drag and Drop的操作中。下面这些代码就是读取把当前剪切板中的数据内容并存放起来。

  

IDataObject d = Clipboard.GetDataObject ( ) ;

  (2).判定当前剪切板中的数据类型:

  在IdataObject接口中有一个方法名称是GetDataPresent ( ),这个方法的作用是检测存放在接口的数据是否是指定的数据类型或者可以转换成指定的数据类型。他的返回值是布尔型,True表示为指定的数据类型或者可以转换成指定的数据类型。False于上面意思相反。下面语句实现的功能是判定当前剪切板的数据内容是否为位图、文本和超文本的,具体如下:

  

if ( d.GetDataPresent ( DataFormats.Bitmap ) ) {Console.WriteLine ( "当前剪切板中的数据类型是位图!" ) ;} else if ( d.GetDataPresent ( DataFormats.Text ) ) {Console.WriteLine ( "当前剪切板中的数据类型是文本!" ) ;} else if ( d.GetDataPresent ( DataFormats.Html ) ) {Console.WriteLine ( "当前剪切板中的数据类型是超文本!" ) ;} else {Console.WriteLine ( "当前剪切板中的数据类型是其他类型数据!" ) ;}

  四. 程序源代码:

  通过上面的介绍,我们不难理解下面这些程序代码,这些程序代码的功能就是判定当前剪切板中的数据是什么类型。具体如下:

  

using System ;using System.Windows.Forms ;public class MyClipboard{public static void Main ( string [ ] args ){IDataObject d = Clipboard.GetDataObject ( ) ;if ( d.GetDataPresent ( DataFormats.Bitmap ) ) {Console.WriteLine ( "当前剪切板中的数据类型是位图!" ) ;} else if ( d.GetDataPresent ( DataFormats.Text ) ) {Console.WriteLine ( "当前剪切板中的数据类型是文本!" ) ;} else if ( d.GetDataPresent ( DataFormats.Html ) ) {Console.WriteLine ( "当前剪切板中的数据类型是超文本!" ) ;} else {Console.WriteLine ( "当前剪切板中的数据类型是其他类型数据!" ) ;}}}

  五. Visual C#保存剪切板数据的解决思路以及重要步骤的解决办法:

  用Visual C#保存剪切板中的数据要使用的类和接口和判定剪切板中的数据类型基本一样。但由于要读取剪切板数据,就需要用到了IdataObject接口的方法GetData ( ),这个方法的作用就是获得指定类型的数据内容。他的语法为:

  

object GetData ( Type ) ;

  我们注意到这个方法返回的类型是一个Object类型,这是一个参考类型,他的变量就是一个参考类型变量,而我们读取的内容应该是一个实值类型变量,这就又涉及到装箱和出箱的问题了。由于在前面的文章中已经比较详细的说明了这二者的关系(见《用Visual C#动态生成组件》),所以在本文就不介绍了。在本文的程序中是通过下列二行语句来实现这种由参考类型变量转换成实值类型变量的过程:

  

Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;//位图String c = ( String ) d.GetData ( DataFormats.Text ) ;//文本

  实现保存剪切板中数据的程序的设计思路是,首先判定当前剪切板中的数据类型,如果数据类型为位图,则保存到C盘的"my.bmp"文件中,如果数据类型是文本,则用一个RichText组件显示出来。否则则提示是其他类型数据。下图就是程序实现上述功能的截图:

  图01:数据类型为位图的时候,程序运行界面

  图02:数据类型为文本时程序运行界面

  如何判定剪切板数据类型在上面已经介绍过了,程序的另外一个难点就是,假定已经判定剪切板中的数据类型为位图,如何保存数据。在程序中是通过名称空间System.Windows.Forms中的Bitmap类的Save ( )方法来实现的。下列语句就是具体的实现方法。

  

Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;b.Save ( @"c:my.bmp" ) ;MessageBox.Show ( "当前剪切板内容是位图,已经保存到"MY.BMP"文件中!" ) ;

  六. 用Visual C#读取当前剪切板中数据内容并保存的程序源代码:

  通过上面的介绍,可以得到实现上述功能的源程序代码,如下:

  

using System ;using System.Drawing ;using System.Collections ;using System.ComponentModel ;using System.Windows.Forms ;using System.Data;public class Form1 : Form{private RichTextBox richTextBox1 ;private Button button1 ;private System.ComponentModel.Container components = null ;public Form1(){//初始化窗体中的各个组件InitializeComponent ( ) ;}//清除程序中使用过的资源protected override void Dispose ( bool disposing ){if ( disposing ){if ( components != null ){components.Dispose ( ) ;}}base.Dispose ( disposing );}private void InitializeComponent ( ){this.richTextBox1 = new RichTextBox ( ) ;this.button1 = new Button ( ) ;this.SuspendLayout ( ) ;this.richTextBox1.Location = new System.Drawing.Point ( 40 , 16 ) ;this.richTextBox1.Name = "richTextBox1" ;this.richTextBox1.Size = new System.Drawing.Size ( 336 , 264 ) ;this.richTextBox1.TabIndex = 0 ;this.richTextBox1.Text = "" ;this.button1.Location = new System.Drawing.Point ( 128 , 304 ) ;this.button1.Name = "button1" ;this.button1.Size = new System.Drawing.Size ( 128 , 24 ) ;this.button1.TabIndex = 1 ;this.button1.Text = "获得剪切板中的数据" ;this.button1.Click += new System.EventHandler ( this.button1_Click ) ;this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;this.ClientSize = new System.Drawing.Size ( 408 , 357 ) ;this.Controls.Add ( button1 );this.Controls.Add ( richTextBox1 );this.Name = "Form1";this.Text = "用Visual C#来保存剪切板中的数据!";this.ResumeLayout(false);}static void Main ( ){Application.Run ( new Form1 ( ) ) ;}private void button1_Click ( object sender , System.EventArgs e ){ //定义一个IDataObject接口IDataObject d = Clipboard.GetDataObject ( ) ;//如果剪切板中数据是位图,则另存为C盘的my.bmp文件if ( d.GetDataPresent ( DataFormats.Bitmap ) ){//出箱Bitmap b = ( Bitmap ) d.GetData ( DataFormats.Bitmap ) ;b.Save ( @"c:my.bmp" ) ;MessageBox.Show ( "当前剪切板内容是位图,已经保存到"MY.BMP"文件中!" ) ;} //如果是文本,则用窗体中的RichText组件显示文本内容。else if ( d.GetDataPresent ( DataFormats.Text ) ){//出箱String c = ( String ) d.GetData ( DataFormats.Text ) ;richTextBox1.Text = c ;}else{MessageBox.Show ( "剪切板中是其他类型的数据!" ) ;}}}

  七. 总结:

  本文介绍了在用Visual C#进行剪切板编程的二个重要方面的内容,即:判定剪切板中的数据和保存剪切板中的数据。其实针对剪切板的编程用途是比较广的,譬如有了上面的知识做铺垫,我想如果要你用Visual C#开发一个抓图程序,你一定不会说很难吧!

来源:https://www.tulaoshi.com/n/20160219/1614232.html

延伸阅读
C#(发音为See Sharp)是简单、现代、面向对象和类型安全的编程语言。C#起源于C语言家族,因此,C,C++和Java的程序员很快就能熟悉它。C#已经获得了ECMA International和ISO/IEC的国际标准认证,它们分别是ECMA-334标准和ISO/IEC 23270标准。Microsoft用于.NET框架的C#编译器就是根据这两个标准实现的。 C#是面向对象的语言,但C#进一...
本文就来着重探讨一下 Visual C# 数据库基本编程,即:如何浏览记录、修改记录、删除记录和插入记录。针对 数据库 编程始终是程序设计语言的一个重要方面的内容,也是一个难点。数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据库、得到需要的数据和针对数据记录的浏览、删除、修改、插入等操作。其中又以后面针...
最近频繁的接触到泛型方面的问题,所以也不得不来学习一下了,开始主要是在MSDN的WebCast上去下载教学录象看的(李建忠老师的),本篇文章先介绍一下泛型入门方面的知识,希望能让刚开始学习泛型的朋友能够更快的入门,言归正传,首先我们来看一下泛型的基本概念。 最显著的一点就是它参数化了类型,把类型作为参数抽象出来,从而使我们在...
C#中有两种类型:值类型(value type)和引用类型(reference type)。值类型变量直接包括它们的数据,而引用类型变量存储的是它们的数据引用,后者被认为是对象。对于引用类型,有可能两个变量引用相同的对象,因此对其中一个变量的操作可能影响另一个对象引用的对象。对于值类型,每个变量都有自己的数据拷贝,因此对一个变量的操作不可...
表达式(expression)由操作数(operand)和运算符(operator)构成。表达式的运算符标明在操作数上运用了哪种操作。运算符的例子包括+、-、*、/和new。操作数的例子包括字面值、字段、局部变量和表达式。 当表达式包括多个运算符时,运算符的优先级(precedence)控制各个运算符执行的顺序。例如,表达式x+y*z将以x+(y*z)的形式计算...

经验教程

983

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部