首页 / 软件开发 / C# / 用Visual C#操作Clipboard
用Visual C#操作Clipboard2009-12-29Clipboard就是所谓的剪切板,当我们同时按动Ctrl+C键或者点击菜单“拷贝”的时候,选定的对象就被存放在了剪切板中了.如果刚才选定的对象是文件,那么在定盘符后,按动Ctrl+V键或者点击菜单“粘贴”,这时选定的文件就保存到指定的磁盘上面了;如果选定的对象是图象,那么在打开“画图”之后,按动Ctrl+V键或者点击菜单“粘贴”,图象就会显示在画图中了;如果是文本,那么在打开文本编辑器后,按动Ctrl+V键或者点击菜单“粘贴”,这时文本就会显示在文本编辑器中.当然选定的对象还有许多种,这就不一一举例了.上面这些操作其实就是剪切板几种典型的操作.那么这些操作如果用Visual C#来实现到底是个什么样子?本文就将通过一个程序来具体探讨这个问题.一.本文程序设计和运行的软件环境(1).微软公司视窗2000服务器版(2)..Net FrameWork SDK Beta 2二.程序的主要功能以及运行界面其实看了上面的介绍以后,我们不难得出剪切板的几种基本的操作,即:拷贝数据到剪切板中、把当前剪切板中的数据取出来.下面就按照这些操作来编写一个程序.这个程序主窗体是由二个TextBox组件即TextBox1和TextBox2,和二个Button组件构成.实现的功能是当选定TextBox1的文本后,按动“拷贝指定的数据到剪切板”按钮,拷贝数据到剪切板中,然后按动“从当前剪切板获得数据”按钮得到剪切板中的数据,并由TextBox2显示出来.下面的图象是程序运行的界面:图1 拷贝指定对象到剪切板中图2 从当前剪切板中获得数据,并显示出来三.程序的设计思路以及重要步骤地解决办法(1).如何把指定对象拷贝到剪切板中:在这个环节中要处理好二件问题:其一是如何判断是否选定了TextBox1中的对象,其二是如何把选定的对象存放到剪切板中.下面就带着这二个问题来进行分析.I > .如何判断TextBox1中是否选定了对象:对于TextBox组件中有一个属性SelectedText,这个属性就是选定的文本,在程序中是通过判断这个属性值是否为“”,来判断TextBox1中是否选定了对象的.II > .如何把选定的对象存放到剪切板中:要完成此功能,要使用到中的Clipboard类,Clipboard类是一个封闭的类,这决定了他无法被继承,此类的主要功能就是存取剪切板中的数据.他有一个方法SetDataObject(),这个方法的作用就是把数据存放到剪切板中.解决上面二个问题的代码如下:if (textBox1.SelectedText != "")Clipboard.SetDataObject (textBox1.SelectedText) ;elsetextBox2.Text = "在textBox1中没有选定的内容" ;(2).把读取剪切板中的数据,并显示出来.要实现本步骤,也需要解决好二个问题:其一,在剪切板中不仅可以存放文本,还可以存放其他类型的数据,而TextBox2能够显示出来的数据类型只有文本,所以为了程序有更好的稳定性,在显示之前,要判断当前剪切板中的数据类型是文本,其二,读取剪切板中的数据,并显示出来.I > .判断当前剪切板中的数据类型:判断剪切板中的数据类型,要使用到IdataObject接口,此接口的可以存放从剪切板中读取得数据.通过IdataObject接口的方法GetDataPresent()来判断是否为符合自己需要的数据类型.II >.读取剪切板中的数据,并显示出来:通过Clipboard类的GetDataObject()可以把当前剪切板中的数据存放到IdataObject接口中,但IdataObject接口这地数据不能直接被程序使用,必须通过IdataObject接口的GetData()获得数据.但由于GetData()地返回值是一个Object类型变量,即参考类型变量,而TextBox1显示的文本是实值类型变量,所以还要进行一次出箱的操作,这种操作在前面的文章已经比较详细的介绍过了,这里就不加叙述了.经过出箱操作后的数据就可以被TextBox1使用了.下面是解决上面二个问题的代码:IDataObject iData = Clipboard.GetDataObject ( ) ;
//检测数据是否是可以使用的格式,即文本格式
if (iData.GetDataPresent (DataFormats.Text))
{
//是可以使用的格式,就在textbox2中显示剪切板中的内容
textBox2.Text = (String) iData.GetData (DataFormats.Text) ;
}
else
{
//如果不是
textBox2.Text = "没有从剪切板中接收到数据!" ;
}