Question

Je cherche un moyen d'ajouter un bouton de fermeture à un objet .NET ToolTip similaire à celui de NotifyIcon. J'utilise l'info-bulle comme une bulle de message appelée par programme avec la méthode Show (). Cela fonctionne bien, mais il n'y a pas d'événement onclick ou de moyen facile de fermer l'info-bulle. Vous devez appeler la méthode Hide () ailleurs dans votre code et je préférerais que l'info-bulle puisse se fermer. Je sais qu'il existe plusieurs info-bulles sur le réseau qui utilisent le code de gestion et le code non managé pour effectuer cette opération avec l'API Windows, mais je préférerais rester dans mon monde .NET confortable. J'ai une application tierce qui appelle mon application .NET et qui tombe en panne en essayant d'afficher des info-bulles non gérées.

Était-ce utile?

La solution

Vous pouvez essayer d'implémenter votre propre fenêtre d'info-bulle en remplaçant celle existante et en personnalisant la fonction onDraw. Je n’ai jamais essayé d’ajouter de bouton, mais j’ai déjà fait d’autres personnalisations avec l’aide.

    1    class MyToolTip : ToolTip
    2     {
    3         public MyToolTip()
    4         {
    5             this.OwnerDraw = true;
    6             this.Draw += new DrawToolTipEventHandler(OnDraw);
    7 
    8         }
    9 
   10         public MyToolTip(System.ComponentModel.IContainer Cont)
   11         {
   12             this.OwnerDraw = true;
   13             this.Draw += new DrawToolTipEventHandler(OnDraw);
   14         }
   15 
   16         private void OnDraw(object sender, DrawToolTipEventArgs e)
   17         {
                      ...Code Stuff...
   24         }
   25     }

Autres conseils

Vous pouvez sous-classer la classe ToolTip avec vos propres CreateParams qui définissent le style TTS_CLOSE:

private const int TTS_BALLOON = 0x80;
private const int TTS_CLOSE = 0x40;
protected override CreateParams CreateParams
{
    get
    {
       var cp = base.CreateParams;
       cp.Style = TTS_BALLOON | TTS_CLOSE;
       return cp;
    }
}

Le style TTS_CLOSE est également requiert le style TTS_BALLOON et vous devez également définir la propriété ToolTipTitle dans l'info-bulle.

Pour que ce style fonctionne, vous devez activer les styles de contrôles communs v6 à l'aide d'un manifeste d'application. .

Ajouter un nouveau " fichier de manifeste d'application " et ajoutez ce qui suit sous < assembly > élément:

<dependency>
  <dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
      />
  </dependentAssembly>
</dependency> 

Dans Visual Studio 2012, au moins, ces éléments sont inclus dans le modèle par défaut mais sont commentés. Vous pouvez simplement les commenter.

Info-bulle avec bouton de fermeture

Vous pouvez essayer de remplacer la méthode CreateParams dans votre implémentation de la classe ToolTip ... c'est-à-dire

    protected override CreateParams CreateParams
    {
        get
        {
           CreateParams cp = base.CreateParams;
           cp.Style = 0x80 | 0x40; //TTS_BALLOON & TTS_CLOSE

           return cp;
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top