visualc6.0:用Visual C#来操作Clipboard

  Clipboard就是所谓剪切板,当我们同时按动Ctrl+C键或者点击菜单“拷贝”时候,选定对象就被存放在了剪切板中了.如果刚才选定对象是文件,那么在定盘符后,按动Ctrl+V键或者点击菜单“粘贴”,这时选定文件就保存到指定磁盘上面了;如果选定对象是图象,那么在打开“画图”的后,按动Ctrl+V键或者点击菜单“粘贴”,图象就会显示在画图中了;如果是文本,那么在打开文本编辑器后,按动Ctrl+V键或者点击菜单“粘贴”,这时文本就会显示在文本编辑器中.当然选定对象还有许多种,这就不举例了.上面这些操作其实就是剪切板几种典型操作.那么这些操作如果用Visual C#来实现到底是个什么样子?本文就将通过来具体探讨这个问题.

  .本文设计和运行软件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个方面内容最为重要.虽然以上这些操作和处理针对对象都是文本,但实际对于其他类型对象也是样,只需要做少许修改就可以了,不信你试下.



Tags:  visual.c教程 visual.c visualc6.0中文版 visualc6.0

延伸阅读

最新评论

发表评论