Domanda

Ho un controllo modellato su a Casella combinata.Voglio rendere il controllo in modo che il controllo confine sembra quello di uno standard Casella combinata di Windows.Nello specifico, ho seguito la documentazione MSDN e tutto il rendering del controllo è corretto tranne il rendering quando il controllo è disabilitato.

Giusto per essere chiari, questo è per un sistema con Stili visivi abilitato.Inoltre, tutte le parti del controllo vengono visualizzate correttamente tranne il bordo attorno a un controllo disabilitato, che non corrisponde a quello disabilitato Bordo della casella combinata colore.

Sto usando il VisualStyleRenderer classe.MSDN suggerisce di utilizzare il file VisualStyleElement.TextBox elemento per il Casella di testo parte di Casella combinata controllo ma uno standard disabilitato Casella di testo e un disabile standard Casella combinata disegna in modo leggermente diverso (uno ha un bordo grigio chiaro, l'altro un bordo azzurro).

Come posso ottenere il rendering corretto del controllo in uno stato disabilitato?

Nessuna soluzione corretta

Altri suggerimenti

Non sono sicuro al 100% se questo è quello che stai cercando, ma dovresti dare un'occhiata a VisualStyleRenderer nello spazio dei nomi System.Windows.Forms.VisualStyles.

  1. Classe VisualStyleRenderer (MSDN)
  2. Come:Eseguire il rendering di un elemento di stile visivo (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Poiché VisualStyleRenderer non funzionerà se l'utente non ha abilitato gli stili visivi (potrebbe eseguire la "modalità classica" o un sistema operativo precedente a Windows XP), dovresti sempre avere un fallback alla classe ControlPaint.

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

e poi fai così quando disegni:

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

Spero che sia d'aiuto!

Sono qualcuno dei ControlPaint metodi utili a questo scopo?Questo è ciò che di solito utilizzo per i controlli con rendering personalizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top