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

Translate

J'ai un contrôle qui est calqué sur unBoîte combo. Je veux rendre le contrôle afin que le contrôlefrontièreressemble à celle d'un standardComboBox 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é.

Juste pour être clair, c'est pour un système avecStyles visuelsactivée. En outre, toutes les parties du contrôle s'affichent correctement à l'exception de la bordure autour d'un contrôle désactivé, qui ne correspond pas à laBordure ComboBoxCouleur.

J'utilise leVisualStyleRendererclasse. MSDN suggère d'utiliser leVisualStyleElement.TextBoxélément pour leZone de textepartie de laBoîte combocontrôle mais un standard désactivéZone de texteet un standard désactivéBoîte combodessinez légèrement différemment (l'un a une bordure gris clair, l'autre une bordure bleu clair).

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

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Je ne suis pas sûr à 100% si c'est ce que vous recherchez, mais vous devriez consulter leVisualStyleRendererdans l'espace de noms System.Windows.Forms.VisualStyles.

  1. Classe VisualStyleRenderer(MSDN)
  2. Procédure: rendre un élément de style visuel(MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled(MSDN)

Étant donné que VisualStyleRenderer ne fonctionnera pas si l'utilisateur n'a pas activé les styles visuels (il / elle peut exécuter le `` mode classique '' ou un système opérationnel antérieur à Windows XP), vous devriez toujours avoir un retour vers la classe ControlPaint.

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

puis faites comme ceci lors du dessin:

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

J'espère que cela aide!

La source
Translate

Sont l'un desControlPaintméthodes utiles pour cela? C'est ce que j'utilise habituellement pour les contrôles rendus personnalisés.

La source