Pergunta

Eu gostaria de usar o Segoe UI 9 pt no Vista e o Tahoma 8 pt no Windows XP/etc.(Na verdade, eu me contentaria com o Segoe UI em ambos, mas meus usuários provavelmente não o têm instalado.) Mas, sendo eles bem diferentes, eles realmente bagunçam o layout dos meus formulários.Então...existe uma boa maneira de lidar com isso?

Um exemplo:eu tenho um Label, com algum espaço em branco no meio, no qual coloco um NumericUpDown ao controle.Se eu usar o Segoe UI, o NumericUpDown fica cerca de 5 pixels à esquerda do espaço em branco, em comparação com quando uso o Tahoma.Isso é uma dor;Não tenho certeza do que fazer aqui.

Então, mais especificamente, minha pergunta seria:como posso colocar controles no meio de um espaço em branco no meu Labelé (ou CheckBoxes, etc.)?Mais geralmente:existe uma boa maneira de lidar com fontes variadas no Windows Forms?

Editar:Acho que as pessoas não entenderam a pergunta.Eu sei como variar minhas fontes baseado no sistema operacional.Eu simplesmente não sei como lidar com os problemas de layout que surgem ao fazer isso.

Responder a ajryan, quick_dry:OK, vocês entenderam a pergunta.Acho que MeasureString pode funcionar, embora eu esteja interessado em explorar ainda mais as melhores maneiras de resolver esse problema.

O problema com a divisão do controle é mais aparente com, digamos, um CheckBox.Lá, se o usuário clicar na "segunda metade" do CheckBox (que seria um separado Label controle, eu acho), o CheckBox não muda de estado.

Foi útil?

Solução

É estranho precisar colocar um controle dentro de outro.Você pode estar resolvendo um problema upstream de forma errada.Você é capaz de dividir o rótulo em dois rótulos com o updown entre eles e talvez contar com um painel TableLayout do Windows Forms?

Se for essencial tentar posicionar com base nos tamanhos das fontes, você pode usar Gráficos.MeasureString("String antes do updown", myLabel.Font)

Se o que você procura é o posicionamento do controle dependente da fonte, você provavelmente deveria renomear a pergunta.


[editar] Você pode manipular o evento click da parte "segunda metade" do rótulo e alterar o estado da caixa de seleção nesse evento.A coisa toda parece um hack.Qual é o problema que está sendo resolvido por esse estranho layout de controle?Por que você precisa de um up-down no meio de uma etiqueta?

Outras dicas

Eu apoio o uso de TableLayoutPanel para controles embutidos de linha única.

Normalmente defino cada coluna e a primeira linha como AutoSize e defino a propriedade Dock de cada controle filho como Fill no designer.Isso faz com que o layout horizontal seja exibido corretamente.Para alinhar o texto entre rótulos/caixas de texto, defina a propriedade TextAlign como MiddleLeft.

Se o seu texto flui para a próxima linha, não há solução fácil.Usar Graphics.MeasureString/TextRenderer.MeasureText e alguma lógica sofisticada de empacotamento é sua melhor aposta :(

Em primeiro lugar, você pode descobrir qual versão do Windows está usando com o Sistema Operacional.Plataforma propriedade na biblioteca do sistema.

Em segundo lugar, é possível que você coloque suas configurações de fonte em arquivos de recursos e determine qual arquivo de recursos usar dependendo de certas condições (por exemplo, a versão do seu sistema operacional).

Pessoalmente, porém, acho que seria bom deixar o usuário determinar as fontes que eles preferir em vez da fonte que você deseja que eles usem.

Finalmente, você pode querer dar uma olhada em WPF pois este é um dos espaços problemáticos que foi concebido para resolver.

o problema está resolvendo o posicionamento dos controles?ou sejavocê sabe que as fontes X e Y funcionam nos sistemas operacionais A e B e fornecem o layout desejado com o texto que você está usando nesses sistemas?

O método MeasureString pode ajudar a elaborar seu layout de uma forma que você não esteja vinculado a fontes específicas.

float textWidth = gráficos.MeasureString(someString, someFont).Width;

(uma mudança no alinhamento do texto funcionaria?Eu posso estar entendendo mal o problema também)

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