Comment rendre un contrôle pour ressembler ComboBox avec les styles visuels activés?

voix
28

J'ai un contrôle qui est calqué sur un ComboBox . Je veux rendre le contrôle afin que le contrôle frontière ressemble à celle d'une norme ComboBox de Windows . Plus précisément, j'ai suivi la documentation MSDN et tout le rendu du contrôle est correct , sauf pour le rendu lorsque le contrôle est désactivé.

Pour être clair, ceci est pour un système avec des styles visuels sont activés. En outre, toutes les parties du contrôle de rendu correctement , sauf la frontière autour d' un contrôle désactivé, ce qui ne correspond pas aux personnes handicapées frontière ComboBox couleur.

J'utilise la VisualStyleRenderer classe. MSDN suggère d' utiliser l' VisualStyleElement.TextBoxélément de la zone de texte une partie de la zone de liste déroulante contrôle mais un niveau désactivé zone de texte et un niveau désactivé ComboBox tirer légèrement différente (une a une bordure gris clair, l'autre d' une frontière bleu clair).

Comment puis-je obtenir un rendu correct du contrôle dans un état désactivé?

Créé 05/08/2008 à 22:19
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
8

Je ne suis pas sûr à 100% si c'est ce que vous cherchez , mais vous devriez vérifier l' VisualStyleRenderer dans le System.Windows.Forms.VisualStyles-espace de noms.

  1. Classe VisualStyleRenderer (MSDN)
  2. Comment: Rendu d' un style visuel élément (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Étant donné que VisualStyleRenderer ne fonctionnera pas si l'utilisateur ne dispose pas de styles visuels appliquées (il / elle pourrait être en cours d'exécution « mode classique » ou un système d'exploitation avant Windows XP), vous devriez toujours avoir une solution de repli à la classe ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

puis faire comme ceci lors de l'élaboration:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

J'espère que cela aide!

Créé 16/08/2008 à 22:28
source utilisateur

voix
1

Est -ce que des ControlPaint méthodes utiles pour cela? Voilà ce que je l'habitude d' utiliser pour les contrôles rendus sur mesure.

Créé 16/08/2008 à 20:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more