剪贴板对象处理

本文关键字:处理 对象 剪贴板 | 更新日期: 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);
    }
}