剪贴板对象处理
本文关键字:处理 对象 剪贴板 | 更新日期: 2023-09-27 18:01:18
我在程序中使用windows剪贴板。比如
private void btnTest_Click(object sender, EventArgs e){
IDataObject data = Clipboard.GetDataObject(); //save old data
DoSomethingWithClipboard();
Clipboard.SetDataObject(data); //Set old data back}
这运行得很好,但在第二次我点击我的按钮后,我的旧数据消失了,我认为它在第二次使用IDataObject data = Clipboard.GetDataObject();
后覆盖了一些东西。
在我看来,试图像这样操纵剪贴板是一个坏主意。
- 它是易失性的,所以内容可能在您开始操作后发生了变化。
- 剪贴板中的数据将属于其他应用程序,可能无法正确恢复,导致不稳定。
- 你不应该在没有用户同意的情况下改变剪贴板。
也就是说,这里有一些未经测试的代码应该可以满足您的要求。
public class ClipBoardBackupRestore
{
Dictionary<string, object> clipboardContents = new Dictionary<string, object>();
public void Backup()
{
clipboardContents.Clear();
IDataObject clipboardDataObject = Clipboard.GetDataObject();
foreach (string format in clipboardDataObject.GetFormats())
{
clipboardContents.Add(format, clipboardDataObject.GetData(format));
}
}
public void Restore()
{
DataObject clipboardDataObject = new DataObject();
foreach (string format in clipboardContents.Keys)
{
clipboardDataObject.SetData(format, clipboardContents[format]);
}
Clipboard.SetDataObject(clipboardDataObject);
}
}