.NET Framework 2.0對剪貼板存取操作做了哪些強(qiáng)化

2010-08-28 10:50:09來源:西部e網(wǎng)作者:

為了讓剪貼板的數(shù)據(jù)存取操作更加便利且單純化,.NET Framework 2.0替Clipboard類新增了下列方法:
  • 您現(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ù)以特定的格式存入剪貼板中。
         
    1. 在我們從剪貼板提取數(shù)據(jù)之前,通常會先確認(rèn)是否存在所需格式的數(shù)據(jù)。為了幫助您以更直接且便利的方式完成此類操作,Clipboard類現(xiàn)在新增了下列數(shù)個前綴為Contains的方法,而不再需要通過IDataObject接口來完成:
    2. 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)換成所指定的格式。
           
      1. 確認(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ù)。
             
          顯而易見地,借助于Clipboard類新增的這些方法,將使得剪貼板的數(shù)據(jù)存取操作變得更加容易與直觀。現(xiàn)在,我們就要用這些方法,來改寫前一節(jié)的程序范例。
          程序范例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();

          }

          }

          ...

          }
          關(guān)鍵詞:VS.NET