已清除的剪贴板不为空

Cleared Clipboard is not null

我想检查剪贴板是否包含数据,如果没有,请启用 "Paste" 按钮。但不幸的是,即使我清除了剪贴板,它仍然没有显示它是空的。我正在使用 Windows 表格。

我手动清除剪贴板:

private void button2_Click(object sender, EventArgs e)
        {
            Clipboard.Clear();
        }

然后我将以下代码添加到 Form LoadEvent 中:

if (Clipboard.GetDataObject() != null)
            {
                this.pn1_BtnPaste.Enabled = true;                  
            }

它启用了一个按钮,这对我来说很奇怪。谁能解释为什么会这样?

编辑: 因为我理解错了,让我改一下代码,让它更清楚:

 private void button2_Click(object sender, EventArgs e)
        {
            Clipboard.Clear();

            if (Clipboard.GetDataObject() != null)
            {
                this.pn1_BtnPaste.Enabled = true;
            }
            else
                this.pn1_BtnPaste.Enabled = false;
        }

我点击 "button2" 并且 "pn1_BtnPaste" 仍然启用。

数据可以随时出现在剪贴板上。 Application.Idle 事件是更新按钮状态的好方法:

    public Form1() {
        InitializeComponent();
        Application.Idle += Application_Idle;
    }

保险起见,等window收盘时,您必须再次退订:

    protected override void OnFormClosed(FormClosedEventArgs e) {
        Application.Idle -= Application_Idle;
        base.OnFormClosed(e);
    }

Clipboard.GetDataObject() 并不像您想象的那样工作,它永远不会 returns null。如果你想处理 any 数据,那么你可以像这样编写事件处理程序:

    private void Application_Idle(object sender, EventArgs e) {
        PasteButton.Enabled = Clipboard.GetDataObject().GetFormats().Length > 0;
    }

但是您很可能会发现处理每一种可能的格式比您想象的要实用得多。