web-dev-qa-db-fra.com

Infobulle PictureBox changer de C #

Ok, je suis donc un débutant complet et j'ai réussi à mettre en place une petite application en C # dans laquelle je saisis un nom d'utilisateur dans une zone de texte et l'application obtient l'avatar de ce nom d'utilisateur et l'affiche dans une zone d'image.

Ce que je veux faire, c'est qu'une infobulle indique le nom d'utilisateur saisi dans la zone de texte lorsque la souris survole l'avatar chargé. il devrait changer chaque fois qu'un nouvel avatar est chargé. Je sais comment utiliser les info-bulles de manière normale, mais c'est un peu complexe pour moi. Toute aide serait appréciée.

Merci.

21
BrandNewDev

Ajoutez un événement de survol à votre boîte à images avec le code suivant.

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

La réponse de Joes fait le travail, mais c'est inefficace. Le code crée une nouvelle ToolTip chaque fois que la PictureBox est survolée. Lorsque vous utilisez la méthode SetToolTip(), elle associe la ToolTip créée au contrôle spécifié et conserve la ToolTip en mémoire. Il vous suffit d'appeler cette méthode une fois. Je vous suggère de créer uniquement une ToolTip pour chaque PictureBox dans votre constructeur de formulaires. J'ai testé cela et cela fonctionne bien, et les info-bulles s'affichent plus rapidement pour moi:

public MyForm()
{
    InitializeComponent();

    // The ToolTip for the PictureBox.
    new ToolTip().SetToolTip(pictureBox1, "The desired tool-tip text.");
}
19
Brandon Miller
        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();
    }
1
Rajesh Kumar G

La réponse de Brandon-Miller est correcte, sauf pour le fait qu'il suggère de créer une info-bulle par PictureBox. Ceci est toujours inefficace, bien que meilleur que l'approche de Joe - parce que vous n'avez pas besoin de plus d'un objet Infobulle pour la totalité du formulaire! Il peut créer des milliers de «définitions d'info-bulle» (probablement pas un terme réel) pour différents contrôles (bits et bobs sur les formulaires). C'est pourquoi vous définissez le contrôle comme premier paramètre lors de la création ou de la définition de l'info-bulle.

L'approche correcte (ou du moins la moins coûteuse), à ​​ma connaissance, consiste à créer UN objet Tooltip par formulaire puis à utiliser la fonction SetTooltip pour créer des "définitions" pour différents contrôles. .Exemple:

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

Ou, légèrement différemment, avec l'inicialisation faite à l'avance:

// 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 vous avez ajouté l'info-bulle dans le concepteur de formulaires, vous pouvez omettre la déclaration au début. Vous n'avez même pas besoin de l'inicialiser (autant que je sache, cela devrait être fait par le code généré par le concepteur), utilisez simplement SetToolTip pour créer de nouvelles info-bulles pour différents contrôles.

0
EvilGeorge