Pergunta

Em C#, temos o seguinte:

  • UMA UserControl contendo um PictureBox e um invisível FlowPanel.

O que eu quero alcançar:

  • Quando o UserControl é pairado (MouseHover), o invisívelFlowPanel será definido como visible = true. Quando o mouse sai doUserControl ou FlowPanel, aFlowPanel deve ser definido visible = false.

Usando MouseLeave sobre UserControl não faz o trabalho, porque este evento é acionado quando o mouse entra FlowPanel. Escondendo o FlowPanel Quando o mouse sai FlowPanel faz isso, mas é buggy (às vezes MouseLeave é desencadeado, às vezes não).

Qual é a melhor maneira de consertar isso?

Foi útil?

Solução

Eu fiz algo semelhante em um dos meus formulários

Faça um if (contorl.Opacity = 1.0) dentro do seu primeiro evento

private void Form1_MouseLeave(object sender, EventArgs e)
{
   if (this.ClientRectangle.Contains(this.PointToClient(Cursor.Position)))
   {
    this.Opacity = 1.0;
   }
   else
   {
      int loopctr = 0;

      for (loopctr = 100; loopctr >= 5; loopctr -= 10)
      {
        this.Opacity = loopctr / 99.0;
        this.Refresh();
        Thread.Sleep(100);
      }
   }
}

Outras dicas

No caso quando FlowPanel.MouseLeave não é desencadeado, não é UserControl.MouseLeave provocado? Suponho que se esconder em ambos os eventos pode fazer o truque.

Este é um problema de interface do usuário comum. Os eventos do mouse surgem como amostras, para que seja possível perder algumas posições de pixel e um controle não obtenha o evento do mouse.

Uma maneira não tão agradável que funciona está configurando alguma forma de timer quando o MouseHover é detectado dentro do controle e pesquisa para o cursor em intervalos regulares (como 342ms).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top