Como se pode obter a funcionalidade de quebra de linha para um Label
texto fora dos limites?
184
A resposta rápida: desligue o AutoSize .
O grande problema aqui é que o rótulo não altera sua altura automaticamente (somente largura). Para fazer isso direito, você precisará subclassificar o rótulo e incluir lógica de redimensionamento vertical.
Basicamente, o que você precisa fazer no OnPaint é:
Você também precisará definir o sinalizador de estilo ResizeRedraw no construtor.
Na verdade, a resposta aceita é desnecessariamente complicada.
Se você definir o rótulo para AutoSize, ele aumentará automaticamente com o texto que você inserir nele. (Isso inclui crescimento vertical.)
Se você deseja torná-lo com quebra de linha em uma largura específica, pode definir a propriedade MaximumSize.
Testado e funciona.
fonte
Dock
propriedade do rótulo e do painel paraTop
, em vez da minha solução.OnResize
no pai e ligueimyLabel.MaximumSize = new Size(Bounds.Width, 0);
No meu caso (etiqueta em um painel), defino
label.AutoSize = false
elabel.Dock = Fill
. E o texto do rótulo é quebrado automaticamente.fonte
Não há propriedade de quebra automática, mas isso pode ser feito programaticamente para dimensioná-lo dinamicamente. Aqui está uma solução:
Selecione as propriedades do rótulo
AutoSize
=True
MaximumSize
= ( Largura , Altura ), em que Largura = tamanho máximo que você deseja que o rótulo seja e Altura = quantos pixels você deseja que ele envolvafonte
No MSDN , agrupar automaticamente o texto no rótulo :
fonte
Height = sz.Height + Padding.Vertical;
)Eu tive que encontrar uma solução rápida, então apenas usei um TextBox com essas propriedades:
fonte
Tenha um melhor com base na resposta de @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width;
isso permite que você use a etiqueta de crescimento automático quando acoplada a um pai, por exemplo, um painel.this.Height = sz.Height + Padding.Bottom + Padding.Top;
aqui cuidamos do preenchimento da parte superior e inferior.fonte
Manuseie o
ClientSizeChanged event
para o painel, fazendo com que a etiqueta preencha o espaço:Defina
Auto-Size
para o rótulo comotrue
Dock
para o rótulo comoFill
fonte
Não tenho certeza que vai caber todos os casos de uso, mas muitas vezes eu uso um truque simples para obter o comportamento de acondicionamento: colocar o seu
Label
comAutoSize=false
dentro de um 1x1TableLayoutPanel
que vai cuidar doLabel
's tamanho.fonte
Defina a propriedade AutoEllipsis como 'TRUE' e a propriedade AutoSize como 'FALSE'.
fonte
Se o seu painel estiver limitando a largura do seu rótulo, você poderá definir a propriedade Âncora do rótulo como Esquerda, Direita e definir AutoSize como true. É conceitualmente semelhante a ouvir o
SizeChanged
evento do Painel e atualizar o MaximumSize do rótulo para umnew Size(((Control)sender).Size.Width, 0)
como sugerido por uma resposta anterior . Todos os lados listados na propriedade Anchor estão bem ancorados no respectivo lado interno do controle. Portanto, listar dois lados opostos no Anchor efetivamente define a dimensão do controle. Ancoragem para esquerda e direita define a propriedade Largura do controle e Ancoragem para superior e inferior deve definir sua propriedade Altura.Esta solução, como C #:
fonte
Se você realmente deseja definir a largura do rótulo independente do conteúdo, acho que a maneira mais fácil é a seguinte:
Agora, o rótulo tem largura constante, mas adapta sua altura automaticamente.
Em seguida, para texto dinâmico, diminua o tamanho da fonte. Se necessário, use este snippet na sub onde o texto do rótulo está definido:
fonte
Isso me ajudou em meu formulário chamado InpitWindow: In Designer for Label:
Código inteiro do meu formulário
fonte
Se as dimensões do botão precisarem ser mantidas inalteradas:
fonte
A resposta simples para esse problema é alterar a propriedade DOCK do Label. É "NENHUM" por padrão.
fonte
fonte
Use
style="overflow:Scroll"
no rótulo como no HTML abaixo. Isso adicionará a barra de rolagem no rótulo dentro do painel.fonte