Como renderizar um controle para se parecer com ComboBox com estilos visuais habilitados?

StackOverflow https://stackoverflow.com/questions/2874

  •  08-06-2019
  •  | 
  •  

Pergunta

Eu tenho um controle que é modelado em um Caixa combo.Quero renderizar o controle para que o controle fronteira parece um padrão Caixa de combinação do Windows.Especificamente, segui a documentação do MSDN e toda a renderização do controle está correta, exceto a renderização quando o controle está desabilitado.

Só para ficar claro, isto é para um sistema com Estilos Visuais habilitado.Além disso, todas as partes do controle são renderizadas corretamente, exceto a borda ao redor de um controle desabilitado, que não corresponde ao controle desabilitado. Borda da caixa de combinação cor.

estou usando o VisualStyleRenderer aula.MSDN sugere usar o VisualStyleElement.TextBox elemento para o Caixa de texto parte de Caixa combo controle, mas um padrão desativado Caixa de texto e um padrão desativado Caixa combo desenhe de forma um pouco diferente (um tem uma borda cinza claro, o outro uma borda azul claro).

Como posso obter a renderização correta do controle em um estado desabilitado?

Nenhuma solução correta

Outras dicas

Não tenho 100% de certeza se é isso que você está procurando, mas você deve verificar o VisualStyleRenderer no namespace System.Windows.Forms.VisualStyles.

  1. Classe VisualStyleRenderer (MSDN)
  2. Como:Renderizar um elemento de estilo visual (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Como o VisualStyleRenderer não funcionará se o usuário não tiver estilos visuais habilitados (ele/ela pode estar executando o 'modo clássico' ou um sistema operacional anterior ao Windows XP), você deve sempre ter um substituto para a classe ControlPaint.

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

e faça assim ao desenhar:

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

Espero que ajude!

Algum dos ControlPaint métodos úteis para isso?Isso é o que costumo usar para controles renderizados personalizados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top