- 您現(xiàn)在可以調(diào)用Clipboard.Clear方法來清除剪貼板中的所有數(shù)據(jù)。不過由于剪貼板并非是單一程序所使用的,而是多個進(jìn)程所共享的,因此在調(diào)用Clear方法之前,請先確認(rèn)此舉不會對其他的進(jìn)程造成不良影響。
- 我們在前一節(jié)中一再強(qiáng)調(diào),Clipboard類的SetDataObject方法會使用IDataObject接口將數(shù)據(jù)以“多重格式”存儲在剪貼板中,而此舉最大的好處是,以后可以采用各種不同的格式從剪貼板中擷取數(shù)據(jù)。但是或許您就是想以特定的單一數(shù)據(jù)格式來將數(shù)據(jù)存儲在剪貼板中,而不需要使用多重格式,為了讓您以更直接的方式來完成此類操作,Clipboard類現(xiàn)在新增了下列數(shù)個前綴為Set的方法來讓您將數(shù)據(jù)以特定格式存入剪貼板中,而不再需要通過DataObject對象來完成:
- Clipboard.SetText方法能夠?qū)⑽淖謹(jǐn)?shù)據(jù)存入剪貼板中。
- Clipboard.SetImage方法能夠?qū)⒁粋Image以Bitmap格式存入剪貼板中。
- Clipboard.SetAudio方法能夠?qū)?shù)據(jù)以WaveAudio格式存入剪貼板中。
- Clipboard.SetFileDropList方法能夠?qū)⒁粋文件名稱集合以FileDrop 格式存入剪貼板中。
- Clipboard.SetData方法能夠?qū)?shù)據(jù)以特定的格式存入剪貼板中。
- 在我們從剪貼板提取數(shù)據(jù)之前,通常會先確認(rèn)是否存在所需格式的數(shù)據(jù)。為了幫助您以更直接且便利的方式完成此類操作,Clipboard類現(xiàn)在新增了下列數(shù)個前綴為Contains的方法,而不再需要通過IDataObject接口來完成:
- Clipboard.ContainsText方法能夠判斷剪貼板中是否存在文字?jǐn)?shù)據(jù)。
- Clipboard.ContainsImage方法能夠判斷剪貼板中是否存在Bitmap格式的數(shù)據(jù)或是數(shù)據(jù)能否轉(zhuǎn)換成Bitmap格式。
- Clipboard.ContainsFileDropList方法能夠判斷剪貼板中是否存在FileDrop格式的數(shù)據(jù)或是數(shù)據(jù)能否轉(zhuǎn)換成FileDrop格式。
- Clipboard.ContainsAudio方法能夠判斷剪貼板中是否存在WaveAudio格式的數(shù)據(jù)。
- Clipboard.ContainsData方法能夠判斷剪貼板中是否存在指定格式的數(shù)據(jù)或是數(shù)據(jù)能夠轉(zhuǎn)換成所指定的格式。
- 確認(rèn)剪貼板中存在所指定格式的數(shù)據(jù)后,接下來就是要將該數(shù)據(jù)提取出來。Clipboard類現(xiàn)在新增了下列數(shù)個前綴為Get的方法,來讓您直接提取剪貼板中特定格式的數(shù)據(jù),而不再需要通過IDataObject接口來完成:
- Clipboard.GetText方法能夠從剪貼板中提取文字?jǐn)?shù)據(jù)。
- Clipboard.GetImage方法能夠從剪貼板中提取圖像數(shù)據(jù)。
- Clipboard.GetFileDropList方法能夠從剪貼板中提取文件名稱的集合。
- Clipboard.GetAudioStream方法能夠從剪貼板中提取音頻數(shù)據(jù)流。
- Clipboard.GetData方法能夠從剪貼板中提取特定格式的數(shù)據(jù)。
程序范例1
程序范例CH8_DemoForm008.cs的功能用途與前一節(jié)的第一個程序范例CH8_DemoForm005.cs完全相同,只不過本程序范例CH8_DemoForm008.cs改用Clipboard類所新提供的SetImage、ContainsImage與GetImage方法來進(jìn)行剪貼板的圖像數(shù)據(jù)的存取操作。從以下的程序代碼可以看出,新的方法可以讓程序代碼更為精簡且容易了解:
privatevoid btnCopyImageToClipboard_Click(object sender, EventArgs e)
{
try
{
// 將項(xiàng)目的圖像資源存入剪貼板中。
Clipboard.SetImage(Resources.章立民的大頭照);
btnSaveClipboardToFile.Enabled =true;
}
...
}
privatevoid btnSaveClipboardToFile_Click(object sender, EventArgs e)
{
try
{
// 判斷剪貼板中是否存在圖像數(shù)據(jù)。if (Clipboard.ContainsImage())
{
// 使用GetImage方法取得剪貼板中的圖像數(shù)據(jù)。
System.Drawing.Image oImgObj =
Clipboard.GetImage();
// 存儲成 Bitmap。
oImgObj.Save(@"C:\Test.bmp",
System.Drawing.Imaging.ImageFormat.Bmp);
// 存儲成 JPEG。
oImgObj.Save(@"C:\Test.jpeg",
System.Drawing.Imaging.ImageFormat.Jpeg);
// 存儲成 GIF。
oImgObj.Save(@"C:\Test.gif",
System.Drawing.Imaging.ImageFormat.Gif);
Process.Start("explorer.exe", @"C:\");
}
}
...
}
程序范例2
程序范例CH8_DemoForm009.cs的功能用途與前一節(jié)的第二個程序范例CH8_DemoForm006.cs完全相同,只不過本程序范例CH8_DemoForm009.cs改用Clipboard類所新提供的SetText、SetImage與SetData方法來將文本字符串與圖像數(shù)據(jù)存入剪貼板中。從以下的程序代碼可以看出,新的方法可以讓程序代碼更為精簡且容易了解:
// 將文本字符串 "From Microsoft !" 以標(biāo)準(zhǔn)的 ANSI 文字格式復(fù)制到剪貼板。privatevoid tsmiCopyTextAsText_Click(object sender, EventArgs e)
{
Clipboard.SetText(strText, TextDataFormat.Text);
}
// 將文本字符串 "From Microsoft !" 以 HTML格式復(fù)制到剪貼板。privatevoid tsmiCopyTextAsHTML_Click(object sender, EventArgs e)
{
Clipboard.SetText(strHTML, TextDataFormat.Html);
}
// 將文本字符串 "From Microsoft !" 以 RTF格式復(fù)制到剪貼板。privatevoid tsmiCopyTextAsRTF_Click(object sender, EventArgs e)
{
Clipboard.SetText(strRTF, TextDataFormat.Rtf);
}
// 將文本字符串 "From Microsoft !" 以 XML 格式復(fù)制到剪貼板。
// 請注意,由于 XML 并不是剪貼板所自帶的格式,因而這代表
// 一種獨(dú)有的格式。privatevoid tsmiCopyTextAsXML_Click(object sender, EventArgs e)
{
Clipboard.SetData("MyInternalXmlFormat", strXML);
}
// 將項(xiàng)目的圖像資源存入剪貼板中。privatevoid tsmiCopyImageAsBitmap_Click(object sender, EventArgs e)
{
try
{
Clipboard.SetImage(Resources.章立民_01);
}
...
}
仔細(xì)比較程序范例CH8_DemoForm009.cs與CH8_DemoForm006.cs之后可以發(fā)現(xiàn),CH8_DemoForm009.cs仍然保留了CH8_DemoForm006.cs極大部分的寫法,尤其是在將數(shù)據(jù)以“多重格式”存儲在剪貼板中以及判斷剪貼板中擁有哪些格式的操作方面,仍然必須借助于DataObject對象以及IDataObject接口。因此大家可別以為有了新的就忘了舊的,應(yīng)該學(xué)會如何綜合運(yùn)用所有的技巧才是上策。
程序范例3
程序范例CH8_DemoForm010.cs的功能用途與前一節(jié)的第三個程序范例CH8_DemoForm007.cs完全相同,只不過本程序范例CH8_DemoForm010.cs改用Clipboard類所新提供的SetAudio、ContainsAudio與GetAudioStream方法來進(jìn)行剪貼板的音頻數(shù)據(jù)的存取操作。從以下的程序代碼可以看出,新的方法可以讓程序代碼更為精簡且容易了解:
privatevoid btnCopyWavAudioToClipboard_Click(
object sender, EventArgs e)
{
try
{
// 將項(xiàng)目的音頻資源 GoTop 存入剪貼板中。
Clipboard.SetAudio(Resources.GoTop);
btnPlayClipboardWavAudio.Enabled =true;
}
...
}
privatevoid btnPlayClipboardWavAudio_Click(object sender, EventArgs e)
{
try
{
// 判斷剪貼板中是否存在音頻數(shù)據(jù)。if (Clipboard.ContainsAudio())
{
// 使用 GetAudioStream 方法取得剪貼板中的音頻數(shù)據(jù)以便加以播放。
SoundPlayer player =new SoundPlayer(Clipboard.GetAudioStream());
player.Play();
}
}
...
}