Domanda

Sto cercando un modo per aggiungere un pulsante di chiusura a un oggetto .NET ToolTip simile a quello di NotifyIcon. Sto usando il tooltip come un fumetto di messaggio chiamato programmaticamente con il metodo Show (). Funziona bene ma non esiste un evento onclick o un modo semplice per chiudere la descrizione comandi. Devi chiamare il metodo Hide () da qualche altra parte nel tuo codice e preferirei che il tooltip fosse in grado di chiudersi. So che ci sono diverse descrizioni dei palloncini in rete che usano il codice di gestione e non gestito per eseguire ciò con l'API di Windows, ma preferirei rimanere nel mio comodo mondo .NET. Ho un'applicazione di terze parti che chiama la mia applicazione .NET e presenta arresti anomali durante il tentativo di visualizzare descrizioni comandi non gestite.

È stato utile?

Soluzione

Puoi provare a implementare la tua finestra del suggerimento sostituendo quella esistente e personalizzando la funzione onDraw. Non ho mai provato ad aggiungere un pulsante, ma ho già fatto altre personalizzazioni con la descrizione comandi.

    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     }

Altri suggerimenti

Puoi sottoclassare la classe ToolTip con i tuoi CreateParams che impostano lo stile 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;
    }
}

Lo stile TTS_CLOSE anche richiede lo stile TTS_BALLOON e devi anche impostare la proprietà ToolTipTitle sulla descrizione comando.

Per far funzionare questo stile, devi abilitare gli stili v6 di Common Controls utilizzando un manifest dell'applicazione .

Aggiungi un nuovo " File manifest dell'applicazione " e aggiungere quanto segue in < assembly > Elemento:

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

Almeno in Visual Studio 2012, questa roba è inclusa nel modello predefinito ma commentata: puoi semplicemente decommentarla.

Descrizione comando con pulsante di chiusura

Puoi provare a sovrascrivere il metodo CreateParams nella tua implementazione della classe ToolTip ... cioè.

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

           return cp;
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top