evento MouseHover / MouseLeave sobre toda a janela inteira
-
19-09-2019 - |
Pergunta
Eu tenho Form subclasse com manipuladores para MouseHover
e MouseLeave
. Quando o ponteiro está no fundo da janela, a multa eventos trabalho, mas quando o ponteiro se move para um controle dentro a janela, que provoca um evento MouseLeave
.
Existe uma maneira de ter um evento cobrindo toda a janela.
(. NET 2.0, o Visual Studio 2005, Windows XP).
Solução
Quando o evento licença do mouse é acionado uma opção é para verificar se a posição atual do ponteiro e ver se dentro da área de formulário. Não tenho a certeza se a melhor opção é disponível.
Edit: Nós temos uma pergunta semelhante que pode ser do seu interesse. como detectar se o mouse está dentro de todo os controles de formulário e criança em C #?
Outras dicas
Substituir o evento MouseOver não desencadear desde que o mouse entra um controle filho
protected override void OnMouseLeave(EventArgs e)
{
if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
return;
else
{
base.OnMouseLeave(e);
}
}
Não há nenhuma boa maneira de fazer MouseLeave confiável para um controle de recipiente. Punt este problema com um temporizador:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
timer1.Interval = 200;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Enabled = true;
}
private bool mEntered;
void timer1_Tick(object sender, EventArgs e) {
Point pos = this.PointToClient(Cursor.Position);
bool entered = this.ClientRectangle.Contains(pos);
if (entered != mEntered) {
mEntered = entered;
if (!entered) {
// Do your leave stuff
//...
}
}
}
}
Em seu controle de usuário criar um evento MouseHover para o seu controle como este, (ou outro tipo de evento) como este
private void picBoxThumb_MouseHover(object sender, EventArgs e)
{
// Call Parent OnMouseHover Event
OnMouseHover(EventArgs.Empty);
}
Em seu WinForm que hospeda o UserControl tem isso para o UserControl para lidar com o MouseOver assim colocar isto em seu Designer.cs
this.thumbImage1.MouseHover += new System.EventHandler(this.ThumbnailMouseHover);
O que chama esse método em seu WinForm
private void ThumbnailMouseHover(object sender, EventArgs e)
{
ThumbImage thumb = (ThumbImage) sender;
}
Onde ThumbImage é o tipo de usercontrol