2010-03-24 19 views
1

Cela peut être une question simple, même si je n'ai pas trouvé une solution facile:Problème PropertyGrid PaintValue: Comment supprimer (et peindre à l'extérieur) le rectangle standard?

J'ai implémenté mon UITypeEditor personnalisé dans le seul but d'ajouter une PaintValue à bools. Pour les besoins de la discussion, supposons que PaintValue va peindre un radiobutton coché ou non coché.

Question 1:

Maintenant, voici le problème: Il semble que PaintValue insère automatiquement un rectangle de 20x13px après tout le code de peinture est terminée. Naturellement, un radiobutton à l'intérieur d'un rectangle noir est moche. Puis-je demander facilement ou remplacer ce rectagle pas à peindre?

Question 2: À cet égard,

est-il possible de peindre sur le dessus de regard natif de PropertyGrid - ce qui signifie que je pourrais peindre quelque chose pour obscurcir (partie de) la ligne noire séparant deux cellules de grille verticalement? Le but de ce faire serait d'indiquer que deux valeurs étaient liées, comme la largeur/hauteur contrainte à un rapport d'aspect.

Toute réponse est très apprécié.

Répondre

3

Je ne connais pas la peinture, mais sur le point 2 - peut-être ajouter un glyphe via IPropertyValueUIService - il y a un exemple sur .

+0

lien intéressant. J'espérais cependant une réponse plus simple. Ce n'est pas une fonctionnalité centrale de l'application, donc je préfère garder le code propre plutôt que de l'encombrer de beaucoup de choses juste pour dessiner quelques lignes. – Pedery

1

Vous pouvez retirer le rectangle à l'aide du code ci-dessous, mais vous ne pouvez pas peindre l'extérieur de celui-ci. Eh bien, vous pouvez peindre mais le PropertyGrid va peindre dessus plus tard, donc ça n'a pas beaucoup de sens.

public override void PaintValue(PaintValueEventArgs e) 
{ 
    // remove the lines (you cannot draw on these lines anymore) 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, 1)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Y, 1, e.Bounds.Height)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.Width, e.Bounds.Y, 1, e.Bounds.Height)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Height, e.Bounds.Width, 1)); 
    // now draw your own image - it will be shown without the box 
    e.Graphics.DrawImage(myImage, e.Bounds); 
} 
+0

Thumbs up pour necromancing :) – Pedery