2009-12-16 8 views

Respuesta

42

Es un error en el procesador de "sistema", detalles en this bug report.

respuesta de Microsoft proporciona una solución muy fácil:

1) Crear una subclase de ToolStripSystemRenderer, anulando OnRenderToolStripBorder y lo que es un no-op:

public class MySR : ToolStripSystemRenderer 
{ 
    public MySR() { } 

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     //base.OnRenderToolStripBorder(e); 
    } 
} 

2) Utilizar ese procesador para su toolstrip:

toolStrip3.Renderer = new MySR(); 
+8

+1, pero he editado la respuesta para * incluir * la respuesta en lugar de solo señalarla. StackOverflow debe ser independiente, los enlaces externos pueden pudrirse. Constituyen un buen complemento, pero el contenido principal debe estar en SO. –

+0

¿Por qué esto cierra mi aplicación? – RickInWestPalmBeach

8

Es posible que desee agregar comprobación de tipos para evitar la pérdida de frontera ToolStripDropDownMenu/etc. (Puesto heredado de ToolStrip, comienza mismo uso intérprete personalizado automáticamente):

protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
{ 
    if (e.ToolStrip.GetType() == typeof(ToolStrip)) 
    { 
     // skip render border 
    } 
    else 
    { 
     // do render border 
     base.OnRenderToolStripBorder(e); 
    } 
} 

omitida ToolStripDropDownMenu frontera no es tan notable durante el uso de ToolStripSystemRenderer pero se vuelven monstruosidad real con ToolStripProfessionalRenderer.

También, la configuración System.Windows.Forms.ToolStripManager.Renderer = new MySR(); podría ser útil si desea que todas las instancias ToolStrip de toda la aplicación usen MySR de forma predeterminada.

Cuestiones relacionadas