程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 用Visual C#來操作Clipboard

用Visual C#來操作Clipboard

編輯:C#入門知識

Clipboard就是所謂的剪切板,當我們同時按動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 ) ;
else
textBox2.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 = "沒有從剪切板中接收到數據!" ;
}
四.本文的源程序代碼
掌握了程序的主要步驟後,不難得到以下程序代碼:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;

public class Form1 : Form
{
private Button button1 ;
private Button button2 ;
private TextBox textBox1 ;
private TextBox textBox2 ;
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.button1 = new Button ( ) ;
this.button2 = new Button ( ) ;
this.textBox1 = new TextBox () ;
this.textBox2 = new TextBox ( ) ;
this.SuspendLayout ( ) ;

this.button1.Location = new System.Drawing.Point ( 264 , 56 ) ;
this.button1.Size = new System.Drawing.Size ( 96 , 40 ) ;
this.button1.Name = "button1" ;
this.button1.TabIndex = 0 ;
this.button1.Text = "拷貝指定的數據到剪切板" ;
this.button1.Click += new System.EventHandler ( this.button1_Click ) ;

this.button2.Location = new System.Drawing.Point ( 264 , 104 ) ;
this.button2.Size = new System.Drawing.Size ( 96 , 40 ) ;
this.button2.Name = "button2" ;
this.button2.TabIndex = 1 ;
this.button2.Text = "從當前剪切板獲得數據" ;
this.button2.Click += new System.EventHandler ( this.button2_Click ) ;

this.textBox1.Location = new System.Drawing.Point ( 64 , 64 ) ;
this.textBox1.Name = "textBox1" ;
this.textBox1.TabIndex = 2 ;
this.textBox1.Text = "" ;

this.textBox2.Location = new System.Drawing.Point ( 64 , 104 ) ;
this.textBox2.Name = "textBox2" ;
this.textBox2.TabIndex = 3 ;
this.textBox2.Text = "" ;

this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
this.ClientSize = new System.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 ) ;

}

static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}

private void button1_Click ( object sender , System.EventArgs e )
{
if ( textBox1.SelectedText != "" )
Clipboard.SetDataObject ( textBox1.SelectedText ) ;
else
textBox2.Text = "在textBox1中沒有選定的內容";
}

private void button2_Click ( object sender , System.EventArgs e )
{
IDataObject iData = Clipboard.GetDataObject ( ) ;
//檢測數據是否是可以使用的格式,即文本格式
if ( iData.GetDataPresent ( DataFormats.Text ) )
{
//是可以使用的格式,就在textbox2中顯示剪切板中的內容
textBox2.Text = ( String ) iData.GetData ( DataFormats.Text ) ;
}
else
{
//如果不是
textBox2.Text = "沒有從剪切板中接收到數據!" ;
}

}
}
五.總結
至此我們已經完成了用Visual C#實現剪切板基本操作的全部工作,這就是拷貝數據到剪切板、讀取剪切板中需要的數據、顯示剪切板中的數據等三個方面。其中又以前二個方面的內容最為重要。雖然以上這些操作和處理針對的對象都是文本,但實際對於其他類型的對象也是一樣,只需要做少許修改就可以了,不信你試一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved