这只是一个供您测试的示例,因为我没有任何 excel 插件代码可以使用。
我的想法是使用计时器来检查您的任何表单控件是否具有焦点。如果没有焦点,则关闭表单。
首先在您的表单中声明一个 Timer,将其间隔设置为 1 秒(或更短)并添加此代码
private void timer1_Tick(object sender, EventArgs e)
{
if (this.Focused == true) return;
if (AnyFocused(this) == false)
{
this.timer1.Stop();
this.Close();
// Application.Exit(); -- not recommended but...
}
}
private bool AnyFocused(Control c)
{
if (c.Focused == true) return true;
foreach (Control x in c.Controls)
{
if (x.Focused == true) return true;
if (x.Controls != null && x.Controls.Count > 0)
return AnyFocused(x);
}
return false;
}
我用一个简单的 winform 应用程序做了一个小测试,它可以工作,但你的情况(Excel 插件)可能会有很大不同。让我知道。