2008-10-28 29 views
12

Estoy buscando una forma de agregar un botón de cerrar a un objeto .NET ToolTip similar al que tiene NotifyIcon. Estoy usando la información sobre herramientas como un globo de mensaje llamado programáticamente con el método Show(). Eso funciona bien, pero no hay ningún evento onclick o una forma fácil de cerrar la información sobre herramientas. Tienes que llamar al método Hide() en otro lugar de tu código y prefiero que la información sobre herramientas se cierre solo. Sé que hay varios globos de información sobre herramientas alrededor de la red que usan código administrado y no administrado para realizar esto con la API de Windows, pero prefiero quedarme en mi cómodo mundo .NET. Tengo una aplicación de terceros que llama a mi aplicación .NET y tiene bloqueos al intentar mostrar información sobre herramientas no administradas.Agregar botón de cerrar (rojo x) a .NET ToolTip

Respuesta

4

Puede probar implementar su propia ventana de punta de herramienta anulando la existente y personalizando la función onDraw. Nunca intenté agregar un botón, pero he hecho otras personalizaciones con la información sobre herramientas antes.

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  } 
2

Usted puede tratar de reemplazar el método CreateParams en su implementación de la clase de información sobre herramientas ... es decir

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

      return cp; 
     } 
    } 
+0

¿Alguien puede confirmar que esto funciona? Cómo se ve? – Justin

+0

No. Acabo de tratar. :( –

2

Puede subclase de la clase de información sobre herramientas con sus propias CreateParams que define el estilo de 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; 
    } 
} 

El estilo TTS_CLOSE también requires el estilo TTS_BALLOON y también debe establecer la propiedad ToolTipTitle en la información sobre herramientas.

Para que este estilo funcione, debe habilitar los estilos Common Controls v6 using an application manifest.

Añadir un nuevo "Aplicación archivo de manifiesto" y añadir la siguiente bajo el > elemento < montaje:

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

En Visual Studio 2012, al menos, este material está incluido en la plantilla por defecto pero comentado - puedes simplemente descomentarlo.

Tooltip with close button

Cuestiones relacionadas