已清除的剪贴板不为空

本文关键字:剪贴板 清除 | 更新日期: 2023-09-27 18:14:30

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

我手动清除剪贴板:

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

,然后我添加以下代码到Form loaddevent:

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"answers"pn1_BtnPaste"是启用的

已清除的剪贴板不为空

数据可以随时出现在剪贴板上。应用程序。空闲事件是更新按钮状态的好方法:

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

为安全起见,您必须在窗口关闭时再次取消订阅:

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

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

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

但是你很可能会发现处理所有可能的格式比你想象的要实际得多。