2013-01-31 46 views
4

我想獲取當前存儲在Windows剪貼板中的數據並將其保存在一個變量中,然後將數據放回剪貼板。獲取數據然後返回到Windows剪貼板

現在,我使用此代碼:

object l_oClipBrdData = Clipboard.GetDataObject(); 
Clipboard.SetDataObject(l_oClipBrdData ,true); 

但這樣做剪貼板是空的了。

我在做什麼錯?

+0

你有沒有例外? –

+0

運行此代碼時剪貼板上的內容是什麼?另外,你爲什麼使用對象?它是IDataObject。 –

回答

1

傳遞給SetDataObject()的對象應支持序列化。如果這是你自己的類型,用[Serializable]屬性標記它。

更多信息:

http://msdn.microsoft.com/en-gb/library/cs5ebdfz(v=vs.90).aspx

http://www.codeproject.com/Articles/8102/Saving-and-obtaining-custom-objects-to-from-Window

+0

該對象從剪貼板中拉出。 –

+0

沒有例外,它不是我的對象,它是一個已經在剪貼板中的對象。它可以是任何文本,打印屏幕文件或其他任何東西..我將其更改爲IdataObject - 仍然不起作用 – user1472066

3

這裏是展示 '剪貼板' 對象的例子:如果

string text; 
string[] a; 

if (Clipboard.ContainsText()) 
    { 
     text = Clipboard.GetText(TextDataFormat.Text); 

     // the following could have been done simpler with 
     // a Regex, but the regular expression would be not 
     // exactly simple 

     if (text.Length > 1) 
      { 
       // unify all line breaks to \r 
       text = text.Replace("\r\n", "\r").Replace("\n", "\r"); 

       // create an array of lines 
       a = text.Split('\r'); 

       // join all trimmed lines with a space as separator 
       text = ""; 

       // can't use string.Join() with a Trim() of all fragments 
       foreach (string t in a) 
       { 
        if (text.Length > 0) 
         text += " "; 
        text += t.Trim(); 
       } 

      Clipboard.SetDataObject(text, true); 
      } 
    } 
+1

爲什麼你要專注於文本。問題似乎一般。爲什麼Q中的代碼不像執行者期望的那樣?如果您要將文本放在剪貼板上,請使用SetText。 –

+0

該示例旨在演示如下步驟:1.)確保剪貼板包含您期望/希望類型的數據2.)複製數據3.)處理數據4.)將其寫回。爲了它自己,這個例子很有用。我通過任務欄快捷方式每天多次調用它,以將帶有換行符的文本轉換爲適合作爲文件名的字符串。 –

+0

我成功地這樣做了文字..但這還不夠。 我想要做的是創建一個剪貼板,可以存儲更多的1項目,這樣我就可以複製和粘貼東西,而不必每次按CTRL + C覆蓋複製的數據。 如果我使用setText和getText,代碼完美工作..但我希望它能夠處理可能存儲在剪貼板中的所有內容。所以我想拿取剪貼板中的任何內容,將其存儲起來,然後將其完全按原樣放回 – user1472066

1

Clipboard.GetDataObject()從剪貼板返回IDataObject,你想獲得實際的數據,你可以撥打GetData(typeof(dataType))

例子:

 int mydata = 100; 

     Clipboard.SetDataObject(mydata, true); 

     var clipData = Clipboard.GetDataObject().GetData(typeof(int)); 

也有很多predifined數據類型,你可以用

例子:

 if (Clipboard.ContainsData(DataFormats.Bitmap)) 
     { 
      var clipData = Clipboard.GetData(DataFormats.Bitmap); 
     } 
0

嘗試SetDataObject()後調用Clipboard.Flush();

+0

沒有'Flush' 'Clipboard'。 – IllidanS4