2011-02-09 20 views
17

Ok, soy un principiante completo y he logrado armar una pequeña aplicación en C# donde ingreso un nombre de usuario en un cuadro de texto y la aplicación obtiene el avatar de ese nombre de usuario y lo muestra en un cuadro de imagen.PictureBox Tooltip changing C#

Lo que quiero hacer es tener una información sobre herramientas que muestre el nombre de usuario que se escribió en el cuadro de texto cuando el mouse pasa sobre el avatar cargado. debería cambiar cada vez que se carga un nuevo avatar. Sé cómo usar información sobre herramientas de la manera normal, pero esto es un poco complejo para mí. Cualquier ayuda será apreciada.

Gracias.

Respuesta

30

Agregue un evento de desplazamiento a su cuadro de imagen con el siguiente código. respuesta

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

funcionó perfectamente! Acabo de cambiar "Tu nombre de usuario" por textBox1.Text: D ¡gracias! – BrandNewDev

+3

contento de escuchar, es una de esas cosas que te preguntas, ¿por qué Microsoft no hizo una propiedad llamada tooltip para el control de cuadro de imagen ... me llevó un tiempo al principio también – 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

Me preguntaba ... ¿Por qué el cuadro de imagen se invalida cada vez que el mouse se mueve sobre él? En una situación típica, podríamos hacer que el cuadro de imagen se invalidara varias veces en un segundo ... todo a nombre de la actualización de la información sobre herramientas. Esta gran ineficiencia es una seria falta de arranque. –

18

Joes' hace hacer el trabajo, pero es ineficiente. El código crea un nuevo ToolTip cada vez que se pasa el PictureBox. Cuando utiliza el método SetToolTip(), asocia el ToolTip creado con el control especificado y mantiene el ToolTip en la memoria. Solo necesita llamar a este método una vez. Le sugiero que cree solo un ToolTip para cada PictureBox en su constructor de formularios. He probado esto y funciona bien, y la herramienta de sugerencias de muestro más rápido para mí:

public MyForm() 
{ 
    InitializeComponent(); 

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

respuesta de Brandon-Miller está bien, excepto por el hecho de que él sugiere para crear una Tooltip por cuadro de imagen . Esto sigue siendo ineficaz, aunque mejor que el enfoque de Joe, ¡porque en realidad no necesita más de un objeto Tooltip para todo el formulario! Puede crear miles de 'definiciones de información sobre herramientas' (probablemente no un término real) para diferentes controles (bits y bobs en los formularios). Es por eso que define el control como el primer parámetro al crear o configurar la información sobre herramientas.

La correcta (o al menos el menos derrochador) enfoque, por lo que yo soy consciente, es crear un objeto Tooltip por forma de y luego usar el SetTooltip función para crear 'definiciones' para diferentes controles . Ejemplo:

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"); 
} 

O, de forma ligeramente diferente, con el inicialization hecho de antemano:

// 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"); 
} 

Si ha añadido la información sobre herramientas en el diseñador de formularios, puede omitir la declaración al principio. Ni siquiera necesita inicializarlo (hasta donde sé, esto debe hacerlo el código generado por el diseñador), simplemente use SetToolTip para crear nuevas sugerencias de herramientas para diferentes controles.