从中获取数据然后返回Windows剪贴板

时间:2013-01-31 21:37:01

标签: c# copy clipboard paste

我想获取当前存储在Windows剪贴板中的数据并将其保存在变量中,然后将数据放回剪贴板。

现在我正在使用此代码:

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

但是在这之后剪贴板是空的。

我做错了什么?

4 个答案:

答案 0 :(得分: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 :(得分:2)

Clipboard.GetDataObject()会从剪贴板返回IDataObject,如果您想获取可以调用的实际数据GetData(typeof(dataType))

示例:

        int mydata = 100;

        Clipboard.SetDataObject(mydata, true);

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

您还可以使用许多预定义的数据类型

示例:

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

答案 2 :(得分: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

答案 3 :(得分:0)

尝试在Clipboard.Flush();后调用SetDataObject()