2009-11-18 11 views
1

J'ai besoin d'afficher une tooltrip directement sous un menustrip dans mon application, mais la définition de RenderMode = Professional pour chacun ne donne pas des résultats identiques. Ils montrent tous deux un dégradé de fond, mais pas le même.ToolStrip vs MenuStrip - puis-je rendre leur rendu identique?

Y at-il un moyen d'utiliser le rendu de menustrip pour la barre d'outils, ou vice versa? Ou quelqu'un peut-il conseiller la meilleure façon de mettre en œuvre un dégradé, que je peux effectuer dans un moteur de rendu sous-classé?

PLUS TARD AJOUTÉE: Un grand merci à nobugz pour sa réponse ci-dessous. Le matériel utile est également dans this answer.
Il y a juste un autre problème - si je base mon moteur de rendu personnalisé sur ToolStripProfessionalRenderer et écrase OnRenderToolstripBackground, je reçois toujours des coins droits incurvés sur mon ToolStrip mais pas sur mon MenuStrip. Y at-il une logique interne qui fournit une région différente pour le remplissage par le moteur de rendu en arrière-plan? J'ai désactivé (substitué avec une fonction de ne rien faire) le rendu de bordure.

Répondre

1

Je ne le vois pas mais je peux imaginer que c'est un problème. Remplacer le moteur de rendu de sorte qu'il utilise le même moteur de rendu d'arrière-plan pour les éléments de menu et les éléments ToolStrip:

Public Class Form1 
    Public Sub New() 
     InitializeComponent() 
     MenuStrip1.Renderer = New MyRenderer() 
    End Sub 

    Private Class MyRenderer 
     Inherits ToolStripProfessionalRenderer 
     Protected Overrides Sub OnRenderItemBackground(ByVal e As ToolStripItemRenderEventArgs) 
      MyBase.OnRenderMenuItemBackground(e) 
     End Sub 
    End Class 
End Class 
0

Vous pouvez accoster deux panneaux en utilisant DockStyle.Top, au-dessus de l'autre, puis ajoutez un MenuStrip à chacun d'eux. J'ai fait la même chose sur mon application, j'avais besoin de quelques MenuStrips sur des lieux plutôt exotiques. Il peut donner un bon résultat si vous utilisez un arrière-plan contiguos pour eux.