C#中作業系統剪貼簿
剪貼簿是Windows作業系統中最常用的功能之一,它用來從一個應用程式向另一個應用程式傳遞資料,可以是文本,圖象,甚至是程式對象。不過剪貼簿也有限制,它在某個特定的時間只能指向一塊內容,每一個隨後複製的內容都會取代先前的內容。為了在C#中操作剪貼簿(包括內容的讀取和寫入)需要使用到System.Windows.Forms.Clipboard類,下面我們就先以一個例子來說明怎樣向剪貼簿中寫入資料,在寫程式前先看一下運行效果:
如所示,你可以在文字框中輸入一些文本然後點擊複製按紐,這時程式就將文字框中的資料寫到剪貼簿中去了,接著開啟記事本按下Ctrl+V鍵,是不是看到剛剛在文字框中輸入的資料出現在記事本當中呢!實現代碼如下:
private void button1_Click(object sender, System.EventArgs e)
{
// 退出按紐
Close();
}
// 複製按紐
private void button2_Click(object sender, System.EventArgs e)
{
if (this.textBox1.Text == "")
{
MessageBox.Show("Copy之前必須輸入資料","錯誤");
return;
}
else
// SetDataObject(Object obj,bool copy)方法將資料放置在剪貼簿上
// 參數obj指要放置的資料對象
// 參數copy指當程式退出時資料是否仍然儲存在剪貼簿上
Clipboard.SetDataObject(this.textBox1.Text,true);
}
以上程式說明如何向剪貼簿中寫入資料,接下來我們看看如何在程式中讀取剪貼簿中的內容,照樣我們來看看程式的運行效果:
程式組件:
建立一個Windows程式,在表單上放置3個Button和1個Label和1個PictureBox。
程式操作:
1.在某處複製一小段文字,然後回到程式中點擊“顯示剪貼簿中的文本”按紐,這時你剛才複製的那段文本就會出現在表單的Label中
2.開啟一個網頁隨便在一副圖片上單擊右鍵選擇儲存,然後回到程式中點擊“顯示剪貼簿中的圖片”按紐,這時你剛才複製的那張圖片就會出現在表單的PictureBox中
程式使用的一些類或方法:
IDataObject介面,為資料提供與格式無關的機制,也就是說使用該對象可以儲存的資料不受格式的限制,因為我們預先並不知道剪貼簿中的資料是什麼格式的
使用Clipboard類的GetDataObject()方法得到剪貼簿中的資料,該方法返回一個IDataObject
使用IDataObject對象的GetDataPresent(System.Type format)判斷IDataObject對象中儲存的資料是否可以轉換為指定的格式,該方法接收一個參數該參數必須是系統預定義的一種格式類型,該方法返回bool值
最後使用IDataObject對象的GetData(System.Type format)方法得到資料內容,該方法返回Object使用前要進行類型轉換
具體代碼如下:
private void button1_Click(object sender, System.EventArgs e)
{
// GetDataObject檢索當前剪貼簿上的資料
IDataObject iData = Clipboard.GetDataObject();
// 將資料與指定的格式進行匹配,返回bool
if (iData.GetDataPresent(DataFormats.Text))
{
// GetData檢索資料並指定一個格式
this.label1.Text = (string)iData.GetData(DataFormats.Text);
}
else
{
MessageBox.Show("目前剪貼簿中資料不可轉換為文本","錯誤");
}
}
private void button2_Click(object sender, System.EventArgs e)
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
this.pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap);
}
else
{
MessageBox.Show("目前剪貼簿中資料不可轉換為圖片","錯誤");
}
}
private void button3_Click(object sender, System.EventArgs e)
{
Close();
}