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#實現剪切板基本操作的全部工作,這就是拷貝數據到剪切板、讀取剪切板中需要的數據、顯示剪切板中的數據等三個方面.其中又以前二個方面的內容最為重要.雖然以上這些操作和處理針對的對象都是文本,但實際對於其他類型的對象也是一樣,只需要做少許修改就可以了,不信你試一下.