Pergunta

Eu tenho uma situação (uma pesquisa baseada em chave) onde eu vou ter várias entradas de variar, mas limitado, comprimento. Então, eu estou construindo um controle comum a utilizar para cada entrada, e esse controle tem uma caixa de texto para uso quando o tipo de entrada é o texto de forma livre. Nesse caso, eu gostaria que o comprimento da caixa de texto para refletir a restrição colocada na entrada baseada na propriedade MaxLength do TextBox (ou pelo menos em um comprimento máximo de algum tipo).

Como posso fazer isso? Sei que isso é tecnicamente impossível com caracteres de largura variável, mas eu estou interessado em obter perto. Os campos variar em comprimento máximo de 3 caracteres para cerca de 90.

Foi útil?

Solução 5

Com base no que foi dito até agora, eu acho que a solução ideal neste caso é uma combinação de sugestão de John e que diante put por Mitchel e overslacked. Então, eu estou indo para calcular os comprimentos usando um personagem padrão (diga "C"), e, em seguida, definir a largura igual a [fronteira folga] + ([comprimento de caracteres] * ([número de caracteres] + [5 - número A modificação de caracteres 5])).

Vou ter que recalcular o comprimento de caracteres eo campo largura qualquer momento as alterações de fonte.

Outras dicas

Gostaria de tentar evitar essa abordagem dinâmica.
Você realmente acha que ele agrega valor para o usuário? Na minha opinião, parece estranho, quando um controle comum tem um olhar diferente o tempo todo. Você acha que o usuário pode diferir entre uma caixa de texto que permite que 32 caracteres e um que permite que 29 caracteres? Como sobre valores extrem? Quando, por exemplo apenas três caracteres são permitidos - ou mesmo 1024.
Eu faria o TextBox o mesmo comprimento, sempre - que é melhor para o seu controle e mais fácil de implementar. Quando o usuário precisa de uma dica sobre o comprimento máximo do texto adicionar um rótulo que diz "29 caracteres esquerda" e que as atualizações durante a entrada ...

Uma maneira que você pode ser capaz de fazer isso, mas não é 100% exato seria usar o método "MeasureString" do objeto Graphics, para ver como personagens X larga é, com o tipo de letra que é usado atualmente pela caixa de texto.

A partir daí você pode então calcular o necessário "extra" para cobrir as fronteiras etc. Não é uma ciência exata, mas ele iria trabalhar.

Other Thoughts

Medir a seqüência inteira pode ser um pouco ineficiente, você poderia medir 1 personagem X (que é tipicamente maior do que outros), em seguida, multiplicá-lo por todos

Seria mais simples e potencialmente mais visualmente agradável, para "pedaço" os tamanhos da caixa de texto. Escolha uma largura que funciona para campos de 1-5 caracteres, em seguida, uma largura de 6-10, então 11-20,20-30,30-50, etc. Dessa forma, você pode evitar os problemas de alinhamento visuais estranhos que aconteceriam se você tentou campos verticalmente pilha de 29, 32 e 27 caracteres.

Este é (quase) impossível com fontes de largura variável.

Eu acho que você poderia tentar encontrar um personagem relativamente 'grande', mas que ainda pode causar problemas.

A solução mais fácil seria provavelmente para encontrar uma largura de carácter satisfatório (e provavelmente codificar este por tamanho da fonte / família), e, em seguida, basta multiplicar que com o comprimento máximo.

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