Domanda

In C #, abbiamo la seguente:

  • Un UserControl contenente un PictureBox ed un FlowPanel invisibile.

Quello che voglio ottenere:

  • Quando il UserControl si librava (MouseHover), l'invisibile FlowPanel sarà impostato visible = true. Quando il mouse lascia il UserControl o FlowPanel, il FlowPanel deve essere impostato visible = 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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top