2017-06-27 1 views
0

J'ai créé une info-bulle pour une zone de texte en incluant le code ci-dessous dans l'événement HelpRequested.Impossible de masquer l'info-bulle

ToolTip^ toolTip_patterns = gcnew ToolTip; 
String^ caption; 

caption = "Help the user blah blah..."; 
toolTip_patterns->Show(caption, this->textBox_patternsTer); 

Je souhaite que l'info-bulle disparaisse lorsque l'utilisateur quitte la zone de texte. Il ne doit pas être affiché à moins que l'utilisateur n'appuie à nouveau sur F1. J'ai essayé de cacher l'info-bulle avec le code ci-dessous dans l'événement Leave.

ToolTip^ toolTip_patterns = gcnew ToolTip; 
toolTip_patterns->RemoveAll(); 

Ce qui précède ne fonctionne pas, j'ai donc essayé ce qui suit. Cela ne fonctionne pas non plus.

toolTip_patterns->Hide(this->textBox_patternsTer); 

Lorsque j'utilise une ou l'autre méthode (RemoveAll ou Masquer), la pointe de l'outil disparaît lorsque l'utilisateur quitte la zone de texte, mais il revient quand ils planent la souris sur la zone de texte. Je n'ai aucun code dans l'événement MouseHover. Pourquoi fait-il cela?

Merci!


Mise à jour ... Désolé, ce n'est pas le bon endroit pour taper une mise à jour.

Merci pour la suggestion, mais cela ne fonctionne pas. J'ai ajouté un contrôle ToolTip à mon formulaire à partir du concepteur de formulaire, et chacun de mes contrôles a maintenant une propriété nommée ToolTip sur toolTip_patterns. J'ai supprimé la déclaration ci-dessous de l'événement HelpRequest.

ToolTip^ toolTip_patterns = gcnew ToolTip 

Je définis le texte à afficher avec le code ci-dessous.

private: System::Void textBox_patterns_HelpRequested(System::Object^ sender, System::Windows::Forms::HelpEventArgs^ hlpevent) 
    { 
     String^ caption; 
     String^ module; 

     if (sender == textBox_patternsTer) 
      module = "Terminator"; 
     else if (sender == textBox_patternsSec) 
      module = "Secondary"; 
     else if (sender == textBox_patternsPri) 
      module = "Primary"; 
     else 
      return; // No help for selected control. 

     caption = "Enter 32 bit Hex patterns for the " + module + " one pattern per line.\n"; 

     toolTip_patterns->InitialDelay = 0; //< immediately show help 
     toolTip_patterns->Show(caption, (TextBox^)sender); 

J'ai également essayé la forme non-modale ci-dessous.

 toolTip_patterns->SetToolTip((TextBox^)sender, caption); 

L'infobulle affiche bien, et quand je me déplace le focus à un autre contrôle et appuyez sur F1, la pointe de l'outil pour la deuxième commande est affiché. Le problème est que l'info-bulle du premier contrôle est affichée lorsque je passe la souris dessus. Je ne souhaite pas que les info-bulles s'affichent une fois que l'utilisateur a quitté le contrôle. La méthode Hide() ne fonctionne pas, la méthode RemoveAll() ne fonctionne pas et la définition de la légende sur "" ne fonctionne pas. Une idée de ce que je fais mal? Merci.

Répondre

0

Je serais enclin à simplement définir le texte lorsque l'utilisateur demande de l'aide, puis l'effacer lorsque la souris quitte.

Notez que vous devez conserver un pointeur sur l'info-bulle entre l'appel de demandes d'aide et la sortie de la souris, plutôt que d'en allouer un nouveau à chaque appel pour demander de l'aide. Si vous ne le faites pas, vous ne maîtriserez pas l'objet et pourrez le manipuler.

ToolTip^ toolTip_patterns = gcnew ToolTip; 

void doHelpRequest() 
{ 
    String^ caption; 

    caption = "Help the user blah blah..."; 
    toolTip_patterns->Show(caption, this->textBox_patternsTer) 
    toolTip_patterns->InitialDelay = 0; //< immediately show help 
} 

puis

void doMouseLeave() 
{ 
    toolTip_patterns->Show("", this->textBox_patternsTer) 
} 
+0

Je l'ai à travailler en déplaçant mon code à l'événement MouseEnter. Je ne sais pas pourquoi cela agit différemment dans l'événement HelpRequested mais je suis bon avec cette solution. J'ai utilisé votre suggestion toolTip_patterns-> Show ("", (TextBox ^) expéditeur); dans l'événement MouseLeave. Merci beaucoup pour l'aide! –