C # Mostra / nascondi elemento su MouseHover / MouseLeave del genitore
-
18-09-2019 - |
Domanda
In C #, abbiamo la seguente:
- Un
UserControl
contenente unPictureBox
ed unFlowPanel
invisibile.
Quello che voglio ottenere:
- Quando il
UserControl
si librava (MouseHover
), l'invisibileFlowPanel
sarà impostatovisible = true
. Quando il mouse lascia ilUserControl
oFlowPanel
, ilFlowPanel
deve essere impostatovisible = false
.
Utilizzando MouseLeave
su UserControl
non fare il lavoro, perché questo evento viene attivato quando il mouse entra FlowPanel
. Nascondere la FlowPanel
quando lascia il mouse FlowPanel
lo fa, ma è buggy (a volte MouseLeave
viene attivato, a volte no).
Qual è il modo migliore per risolvere questo problema?
Soluzione
ho fatto somthing simile su una delle mie forme
fare un caso (contorl.Opacity = 1.0) all'interno del vostro primo 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);
}
}
}
Altri suggerimenti
Nel caso in cui FlowPanel.MouseLeave
non viene attivato, non è UserControl.MouseLeave
innescato? Suppongo che si nasconde su entrambi gli eventi può fare il trucco.
Questo è un problema comune interfaccia utente. Gli eventi del mouse vengono su come i campioni in modo che sia possibile che alcune posizioni dei pixel sono mancati e un controllo non ottiene il mouse in alto dell'evento.
A non modo così bello che funziona è la creazione di una qualche forma di timer quando viene rilevato MouseHover all'interno del controllo e sondaggio per il cursore a intervalli regolari (come 342ms).