C# Mostrar elemento de esconder
-
18-09-2019 - |
Pergunta
Em C#, temos o seguinte:
- UMA
UserControl
contendo umPictureBox
e um invisívelFlowPanel
.
O que eu quero alcançar:
- Quando o
UserControl
é pairado (MouseHover
), o invisívelFlowPanel
será definido comovisible = true
. Quando o mouse sai doUserControl
ouFlowPanel
, aFlowPanel
deve ser definidovisible = 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?
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).