我想实现一个 LinkLabel,以便在通过鼠标中键单击它时在浏览器中打开链接,然后自动激活带有 LinkLabel 的表单。
为此编写了下面的代码。但它不起作用。在链接上单击鼠标中键后,链接打开,但表单未激活。为什么?以及如何解决?
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.linkLabel1.Text = "https://www.google.com.ua/";
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Middle)
{
if (!this.IsDisposed && !this.Disposing)
{
this.Deactivate += new EventHandler(Form1_Deactivate);
}
}
System.Diagnostics.Process.Start(this.linkLabel1.Text);
}
private void Form1_Deactivate(object sender, EventArgs e)
{
if (!this.IsDisposed && !this.Disposing)
{
this.Deactivate -= new EventHandler(Form1_Deactivate);
this.Activate();
}
}
}
}
编辑: 回答@King King 后发现这个问题只出现在浏览器Opera。在 Firefox 和 Google Chrome 上,如果 Firefox/Google Chrome 没有运行或没有最小化,他的解决方案(500 毫秒的睡眠线程)和我的解决方案(上面的代码)工作正常。如果 Firefox/Google Chrome 最小化并在我的表单上单击 LinkLabel,浏览器会展开,但之后表单不会被激活。
总结一下:不幸的是,跨浏览器的解决方案还没有实现…… Firefox 和谷歌浏览器如果被最小化就不起作用了。而 Opera 则大体上是尽其所能,拦截主动计划。
我知道这个问题的解决方案是存在的。例如,在我想要实现的 IM 客户端QIP中实现。在那里,单击链接窗口焦点后,将独立于浏览器恢复。