2011-02-09 17 views
17

Ok quindi sono un principiante assoluto e sono riuscito a mettere insieme una piccola app in C# dove inserisco un nome utente in una casella di testo e l'applicazione ottiene l'avatar di quel nome utente e lo visualizza in una picturebox.PictureBox Tooltip che cambia C#

Quello che voglio fare è avere un tooltip mostra il nome utente che è stato digitato nella casella di testo quando il mouse passa sopra l'avatar caricato. dovrebbe cambiare ogni volta che viene caricato un nuovo avatar. So come usare i tooltip nel modo normale, ma per me è un po 'complesso. Qualsiasi aiuto sarà apprezzato.

Grazie.

risposta

30

Aggiungi un evento hover alla tua picturebox con il seguente codice. risposta

private void pictureBox1_MouseHover(object sender, EventArgs e) 
{ 
    ToolTip tt = new ToolTip(); 
    tt.SetToolTip(this.pictureBox1, "Your username"); 
} 
+0

ha funzionato perfettamente! ho appena scambiato "il tuo nome utente" per textBox1.Text: D grazie! – BrandNewDev

+3

felice di sentire, è una di quelle cose che ti chiedi, ora perché microsoft non ha creato una proprietà chiamata tooltip per il controllo picturebox ... mi ci è voluto un po 'all'inizio – Joe

0
 private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     ToolTip tooltip1 = new ToolTip(); 
     tooltip1.Show(textBox1.Text, this.pictureBox1); 
    } 

     private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     pictureBox1.Invalidate(); 
    } 
+0

Mi stavo chiedendo ... Perché il la casella immagine viene invalidata ogni volta che il mouse si sposta su di essa? In una situazione tipica, la finestra immagine potrebbe essere invalidata più volte in un secondo ... tutto nel nome dell'aggiornamento del suggerimento. Questa grave inefficienza è una seria non-starter. –

18

Joes' fa ottenere il lavoro fatto, ma è inefficiente. Il codice crea un nuovo ToolTip ogni volta che il valore PictureBox viene passato sopra. Quando si utilizza il metodo SetToolTip(), esso associa lo ToolTip creato con il controllo specificato e mantiene lo ToolTip nella memoria. Devi solo chiamare questo metodo una volta. Ti suggerisco di creare solo uno ToolTip per ogni PictureBox nel tuo costruttore di moduli. Ho provato questo e funziona benissimo, e lo strumento-tips presento più veloce per me:

public MyForm() 
{ 
    InitializeComponent(); 

    // The ToolTip for the PictureBox. 
    new ToolTip().SetToolTip(pictureBox1, "The desired tool-tip text."); 
} 
0

risposta di Brandon-Miller va bene, eccezione per il fatto che egli suggerisce di creare una Tooltip per PictureBox . Questo è ancora inefficace, anche se migliore dell'approccio di Joe - perché in realtà non è necessario più di un oggetto Tooltip per l'intero modulo! Può creare migliaia di "definizioni tooltip" (probabilmente non un vero termine) per diversi controlli (bit e bob sui moduli). Ecco perché stai definendo il controllo come il primo parametro durante la creazione o l'impostazione del suggerimento.

la correttezza (o almeno il minimo spreco) approccio, per quanto io sappia, è quello di creare uno Tooltip struttura alla forma e quindi utilizzare il SetTooltip funzione per creare 'definizioni' per diversi controlli . Esempio:

private ToolTip helperTip; 
public MyForm() 
{ 
    InitializeComponent(); 

    // The ToolTip inicialization. Do this only once. 
    helperTip = new ToolTip(pictureBox1, "Tooltip text"); 
    // Now you can create other 'definitions', still using the same tooltip! 
    helperTip.SetToolTip(loginTextBox, "Login textbox tooltip"); 
} 

Oppure, in modo leggermente diverso, con l'inicialization fatto in precedenza:

// Instantiate a new ToolTip object. You only need one of these! And if 
// you've added it through the designer (and renamed it there), 
// you don't even need to do this declaration and creation bit! 
private ToolTip helperTip = new ToolTip(); 
public MyForm() 
{ 
    InitializeComponent(); 

    // The ToolTip setting. You can do this as many times as you want 
    helperTip.SetToolTip(pictureBox1, "Tooltip text"); 
    // Now you can create other 'definitions', still using the same tooltip! 
    helperTip.SetToolTip(loginTextBox, "Login textbox tooltip"); 
} 

Se hai aggiunto la descrizione comandi nella finestra di progettazione form, è possibile omettere la dichiarazione all'inizio. Non hai nemmeno bisogno di inizializzarlo (per quanto ne so, questo dovrebbe essere fatto dal codice generato dal progettista), basta usare SetToolTip per creare nuovi suggerimenti per diversi controlli.