Я хочу реализовать 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 его решение (со спящим потоком на 500 мс) и мое решение (код выше) работают нормально, если Firefox/Google Chrome не запущен или не свернут. Если Firefox/Google Chrome свернуть и нажать на LinkLabel на моей форме, то браузер разворачивается, но после этого форма не активируется.
Подводя итог: К сожалению, кросс-браузерные решения еще не реализованы... Firefox и Google Chrome не работают, если они свернуты. А Опера вообще сопротивляется, как может, перехвату активного плана.
Я знаю, что решение этой проблемы существует. Например в IM-клиенте QIP реализовано то, что я хочу реализовать. А там после перехода по ссылке фокус окна восстанавливается независимо от браузера.
.BringToFront()
вместо.Activate()
? - person Jordy Langen   schedule 03.07.2013