从中获取数据,然后返回到Windows剪贴板
本文关键字:返回 Windows 剪贴板 然后 获取 数据 | 更新日期: 2023-09-27 17:56:49
我想获取当前存储在Windows剪贴板中的数据并将其保存在变量中,然后将数据放回剪贴板。
现在我正在使用以下代码:
object l_oClipBrdData = Clipboard.GetDataObject();
Clipboard.SetDataObject(l_oClipBrdData ,true);
但是这样做之后,剪贴板是空的。
我做错了什么?
下面是一个演示"剪贴板"对象的示例:
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);
}
}
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);
}
传递给
SetDataObject() 的对象应该支持序列化。如果这是您自己的类型,请使用 [可序列化] 属性对其进行标记。
更多信息:
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
尝试在 SetDataObject()
后调用Clipboard.Flush();
。