Pergunta

Eu tenho um TcheckListBox em um formulário. Sua propriedade de colunas é definida como 2 e, se houver mais itens, pode caber na tela em duas colunas, coloca uma barra de rolagem horizontal na parte inferior do controle.

A coisa é que, da maneira que essa forma apresentada, seria muito mais conveniente rolar verticalmente. Mas não consigo descobrir como fazer a caixa fazer isso. Eu pensei que definir colunas para 1 deveria funcionar, mas não funcionou.

Alguém sabe como fazer um tchecklistbox rolando verticalmente em vez de horizontalmente?

Foi útil?

Solução

Você precisa definir Columns a 0.

Para todos os valores positivos, o VCL envia um LB_SETCOLUMNWIDTH Mensagem para o controle da caixa de listagem nativa subjacente, com o parâmetro de largura definido na largura do cliente da caixa de listagem dividida pelo número de colunas. Os itens que não se encaixam serão iniciados uma nova coluna com a mesma largura da coluna, para que a barra de rolagem horizontal se torne visível.

Se Columns é 0, então há uma única coluna que abrange toda a largura do cliente da caixa de listagem, e os itens que não se encaixam tornarão a barra de rolagem vertical visível e ocultará a barra de rolagem horizontal.

Editar:

Parece haver um interesse genuíno o que acontece quando um valor negativo é usado para o Columns propriedade.

O método TCustomListBox.CreateParams() Define o LBS_MULTICOLUMN Lista de estilo de caixa, dependendo do Columns propriedade sendo diferente de 0. Para valores negativos, o sinalizador de estilo é definido, mas o VCL não envia o LB_SETCOLUMNWIDTH Mensagem, portanto o controle nativo usa a largura da coluna padrão. Isso é documentado ser:

15 vezes a largura média do caractere para a fonte usada pela caixa de listagem.

(Pesquise "o estilo lbs_multicolumn especifica" para encontrar a passagem relevante do texto.)

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