已清除的剪贴板不为空
本文关键字:剪贴板 清除 | 更新日期: 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;
}
但是你很可能会发现处理所有可能的格式比你想象的要实际得多。