.本文设计和运行软件Software环境
(1).微软公司视窗2000服务器版
(2)..Net FrameWork SDK Beta 2
2.主要功能以及运行界面
其实看了上面介绍以后,我们不难得出剪切板几种基本操作,即:拷贝数据到剪
切板中、把当前剪切板中数据取出来.下面就按照这些操作来编写个.这个主窗体是由 2个TextBox组件即TextBox1和TextBox2,和 2个Button组件构成.实现功能是当选定TextBox1文本后,按动“拷贝指定数据到剪切板”按钮,拷贝数据到剪切板中,然后按动“从当前剪切板获得数据”按钮得到剪切板中数据,并由TextBox2显示出来.下面图象是运行界面:
图1 拷贝指定对象到剪切板中
图2 从当前剪切板中获得数据,并显示出来
3.设计思路以及重要步骤地解决办法
(1).如何把指定对象拷贝到剪切板中:
在这个环节中要处理好 2件问题:其是如何判断是否选定了TextBox1中对象,其 2是如何把选定对象存放到剪切板中.下面就带着这 2个问题来进行分析.
I > .如何判断TextBox1中是否选定了对象:
对于TextBox组件中有个属性SelectedText,这个属性就是选定文本,在中是通过判断这个属性值是否为“”,来判断TextBox1中是否选定了对象.
II > .如何把选定对象存放到剪切板中:
要完成此功能,要使用到中Clipboard类,Clipboard类是个封闭类,这决定了他无法被继承,此类主要功能就是存取剪切板中数据.他有个思路方法SetDataObject,这个思路方法作用就是把数据存放到剪切板中.
解决上面 2个问题代码如下:
(textBox1.SelectedText != "")
Clipboard.SetDataObject (textBox1.SelectedText) ;
textBox2.Text = "在textBox1中没有选定内容" ;
(2).把读取剪切板中数据,并显示出来.
要实现本步骤,也需要解决好 2个问题:其,在剪切板中不仅可以存放文本,还可以存放其他类型数据,而TextBox2能够显示出来数据类型只有文本,所以为了有更好稳定性,在显示的前,要判断当前剪切板中数据类型是文本,其 2,读取剪切板中数据,并显示出来.
I > .判断当前剪切板中数据类型:
判断剪切板中数据类型,要使用到IdataObject接口,此接口可以存放从剪切板中读取得数据.通过IdataObject接口思路方法GetDataPresent来判断是否为符合自己需要数据类型.
II >.读取剪切板中数据,并显示出来:
通过Clipboard类GetDataObject可以把当前剪切板中数据存放到IdataObject接口中,但IdataObject接口这地数据不能直接被使用,必须通过IdataObject接口GetData获得数据.但由于GetData地返回值是个Object类型变量,即参考类型变量,而TextBox1显示文本是实值类型变量,所以还要进行次出箱操作,这种操作在前面文章已经比较详细介绍过了,这里就不加叙述了.经过出箱操作后数据就可以被TextBox1使用了.下面是解决上面 2个问题代码:
IDataObject iData = Clipboard.GetDataObject ( ) ;
//检测数据是否是可以使用格式,即文本格式
(iData.GetDataPresent (DataFormats.Text))
{
//是可以使用格式,就在textbox2中显示剪切板中内容
textBox2.Text = (String) iData.GetData (DataFormats.Text) ;
}
{
//如果不是
textBox2.Text = "没有从剪切板中接收到数据!" ;
}
4.本文源代码
掌握了主要步骤后,不难得到以下代码:
using ;
using .Drawing ;
using .Collections ;
using .ComponentModel ;
using .Windows.Forms ;
using .Data ;
public Form1 : Form
{
private Button button1 ;
private Button button2 ;
private TextBox textBox1 ;
private TextBox textBox2 ;
private .ComponentModel.Container components = null ;
public Form1 ( )
{
InitializeComponent ( ) ;
}
protected override void Dispose (bool disposing)
{
(disposing)
{
(components != null)
{
components.Dispose ( ) ;
}
}
base.Dispose (disposing) ;
}
private void InitializeComponent ( )
{
this.button1 = Button ( ) ;
this.button2 = Button ( ) ;
this.textBox1 = TextBox ( ) ;
this.textBox2 = TextBox ( ) ;
this.SuspendLayout ( ) ;
this.button1.Location = .Drawing.Po (264 , 56) ;
this.button1.Size = .Drawing.Size (96 , 40) ;
this.button1.Name = "button1" ;
this.button1.TabIndex = 0 ;
this.button1.Text = "拷贝指定数据到剪切板" ;
this.button1.Click .EventHandler (this.button1_Click) ;
this.button2.Location = .Drawing.Po (264 , 104) ;
this.button2.Size = .Drawing.Size (96 , 40) ;
this.button2.Name = "button2" ;
this.button2.TabIndex = 1 ;
this.button2.Text = "从当前剪切板获得数据" ;
this.button2.Click .EventHandler (this.button2_Click) ;
this.textBox1.Location = .Drawing.Po (64 , 64) ;
this.textBox1.Name = "textBox1" ;
this.textBox1.TabIndex = 2 ;
this.textBox1.Text = "" ;
this.textBox2.Location = .Drawing.Po (64 , 104) ;
this.textBox2.Name = "textBox2" ;
this.textBox2.TabIndex = 3 ;
this.textBox2.Text = "" ;
this.AutoScaleBaseSize = .Drawing.Size (6 , 14) ;
this.ClientSize = .Drawing.Size (384 , 273) ;
this.Controls.Add (textBox2) ;
this.Controls.Add (textBox1) ;
this.Controls.Add (button2) ;
this.Controls.Add (button1) ;
this.Name = "Form1" ;
this.Text = "Visual C#来操作Clipboard!" ;
this.ResumeLayout (false) ;
}
void Main ( )
{
Application.Run ( Form1 ( )) ;
}
private void button1_Click (object sender , .EventArgs e)
{
(textBox1.SelectedText != "")
Clipboard.SetDataObject (textBox1.SelectedText) ;
textBox2.Text = "在textBox1中没有选定内容";
}
private void button2_Click (object sender , .EventArgs e)
{
IDataObject iData = Clipboard.GetDataObject ( ) ;
//检测数据是否是可以使用格式,即文本格式
(iData.GetDataPresent (DataFormats.Text))
{
//是可以使用格式,就在textbox2中显示剪切板中内容
textBox2.Text = (String) iData.GetData (DataFormats.Text) ;
}
{
//如果不是
textBox2.Text = "没有从剪切板中接收到数据!" ;
}
}
}
5.整理总结至此我们已经完成了用Visual C#实现剪切板基本操作全部工作,这就是拷贝数据到剪切板、读取剪切板中需要数据、显示剪切板中数据等 3个方面.其中又以前 2个方面内容最为重要.虽然以上这些操作和处理针对对象都是文本,但实际对于其他类型对象也是样,只需要做少许修改就可以了,不信你试下.
最新评论