none
String Comecando com MAIUSCULAS RRS feed

  • Pergunta

  • Olá Galera.. tudo tranquilo?

    muitas vezes os usuários do meu sistema digitam tudo MAIUSCULO e as vezes tudo minusculo..
    ficando horrível a apresentação dos relatórios e consultas.

    há alguma maneira de fazer com que toda string em qualquer controle ou textbox do sistema

    fique sempre com a primeira letra de cada palavra em MAIUSCULO e as outras letras em minúsculas?

    gostaria de fazer global se possível, para não ter que indicar o método em cada campo manualmente



    • Editado DevMaicon segunda-feira, 25 de julho de 2016 13:10
    segunda-feira, 25 de julho de 2016 05:06

Respostas

  • para responder esse tópico da maneira mais simples possível... 

    public static void RegistroEventsTextBox(this Control.ControlCollection controls)
    {
        foreach (Control ctrControl in controls)
        {
            if (object.ReferenceEquals(ctrControl.GetType(), typeof(TextBox)) // SE FOR TEXTBOX
                ctrControl.Enter += new EventHandler(controlFocus_Enter); // cria esse evento para o componente
    
            RegistroEventsTextBox(ctrControl.Controls);
        }
    }
    
    
    private static void controlFocus_Enter(object sender, EventArgs e)
    {
            ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Upper; // DEIXA TUDO MAIUSCULO
        
            if (((TextBox)(sender as Control)).Name.ToLower().Contains("email".ToLower()))
                ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Lower; // se for e-mail tudo minusculo
        
    }

    Para funcionar, basta chamar antes de abrir o form.

    Form frmCliente = frmClientes();
    
    frmCliente.Controls.RegistroEventsTextBox();
    frmCliente.Show();


    terça-feira, 26 de julho de 2016 15:04

Todas as Respostas

  • Michael,

    Segue um exemplo:

    using System; using System.Globalization; public class SamplesTextInfo { public static void Main() { // Defines the string with mixed casing. string myString = "wAr aNd pEaCe"; // Creates a TextInfo based on the "en-US" culture. TextInfo myTI = new CultureInfo("en-US",false).TextInfo; // Changes a string to lowercase. Console.WriteLine( "\"{0}\" to lowercase: {1}", myString, myTI.ToLower( myString ) ); // Changes a string to uppercase. Console.WriteLine( "\"{0}\" to uppercase: {1}", myString, myTI.ToUpper( myString ) ); // Changes a string to titlecase. Console.WriteLine( "\"{0}\" to titlecase: {1}", myString, myTI.ToTitleCase( myString ) ); } } /* This code produces the following output. "wAr aNd pEaCe" to lowercase: war and peace "wAr aNd pEaCe" to uppercase: WAR AND PEACE "wAr aNd pEaCe" to titlecase: War And Peace */


    Referência: https://msdn.microsoft.com/pt-br/library/system.globalization.textinfo.totitlecase(v=vs.100).aspx


    Carlos Eduardo Ferreira

    segunda-feira, 25 de julho de 2016 11:27
  • Converter um texto não seria o problema

    e sim como fazer para que funcione em todos os TextBox sem ter que aplicar o método em cada campo?

    segunda-feira, 25 de julho de 2016 13:11
  • Michael,

    Você pode criar uma extensão:

    using System;
    using System.Globalization;
    					
    public static class StringExtensions
    {
       public static string ToTitleCase(this string texto)
       {
          return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(texto);
       }
    }

    E na sua aplicação:

    nomeObjeto.Nome = txtNome.Text.ToTitleCase();


    Carlos Eduardo Ferreira

    segunda-feira, 25 de julho de 2016 13:46
  • mas em cada objeto textbox vou ter que chamar essa extensao?

    queria definir algo geral, para TODOS os textBox da solução difinir ToTitleCase

    segunda-feira, 25 de julho de 2016 14:18
  • A extensão é uma classe.

    Crie um arquivo para essa classe e nas suas páginas:

    TextBox.Text.ToTitleCase();

    Essa é uma solução geral para qualquer objeto do tipo String (que é o caso da propriedade Text do TextBox).


    Carlos Eduardo Ferreira

    segunda-feira, 25 de julho de 2016 15:02
  • sim, mas repitindo..

    vou ter que chamar a extensao em cada textBox?

    se eu tiver 50 textbox na tela, vou ter que fazer isso nos 50 individualmente?

    segunda-feira, 25 de julho de 2016 15:27
  • Sim... Porque a solução é para converter o valor de uma string para CamelCase.

    Se o seu objetivo é só TextBox, crie um customizado.

    Exemplo: http://stackoverflow.com/questions/20071464/override-text-property-to-auto-trim-textbox-value


    Carlos Eduardo Ferreira

    segunda-feira, 25 de julho de 2016 16:35
  • Cara realmente dá trabalho fazer isso que vc deseja sem a necessidade de programar campo a campo.
    Mas apenas como uma segunda opinião, já tive esse problema com diversos projetos e a única solução é disso ficar a critério do cliente. Ou seja, ele que decide se vai digitar tudo maiúsculo, minúsculo ou misturado... o programa não deve corrigir isso por ele.

    Importante validar os dados, formatar campos qdo necessário e nada mais, digo isso pq em uma oportunidade tivemos reuniões exclusivamente para isso e por fim a melhor decisão (na minha opinião) foi deixar o usuário decidir e digitar como achar melhor.

    Já tive caso em que foi programado pra gravar sempre a primeira em maiúsculo, depois de alguns meses o usuário reclamou pq não estava saindo TUDO em maiúsculo sendo que ele sempre digitada em maiúsculo.

    É complicado demais, melhor deixar a digitação e gravação dos dados livre.
    Bom desculpe se acabei escrevendo demais sem ser a resposta que vc precisa, mas fica aí a experiência que tive com esses casos.

    segunda-feira, 25 de julho de 2016 17:33
  • em partes concordo com você e esperava alguém me dar esse tipo de dica

    já tenho um outro programa desenvolvido a 10 anos, onde tudo fica 100% MAIUSCULO.

    Nunca tive problemas..nunca ninguém reclamou.
    no entanto, acho muito grosseiro dessa forma.. e queria no entanto inovar deixar mais bonito.

    acredito que o melhor seja deixar tudo maiusculo mesmo.. talvez com uma letra menor para não ficar tão grosseiro

    segunda-feira, 25 de julho de 2016 17:52
  • de qualquer forma gostaria de saber como deixar tudo MAIUSCULO...

    em qualquer componente que fosse digitado


    • Editado DevMaicon segunda-feira, 25 de julho de 2016 17:55
    segunda-feira, 25 de julho de 2016 17:55
  • gostaria apenas de saber como aplicar o exemplo do Carlos, sem precisar ficar aplicando em cada textbox individualmente. pois se tiver 50 textbox, tenho que colocar o metodo nos 50 textbox

    segunda-feira, 25 de julho de 2016 18:27
  • bom.. acabei que encontrando uma solução parecida em outro fórum, no qual mostrava como alterar o fundo ao sair e entrar no campo.

    Fiz umas alterações, criei um método estático para o Form e ficou perfeito.
    Apenas chamo o método ao abrir o form e em todos os TextBox do Form as letras ficam MAIUSCULAS 

    Deixei também a função das cores..
    quando da o focu no campo altera a cor do fundo e da letra.
    quando sai do campo, volta ao normal

    Segue abaixo:

    public static void RegistroEventsTextBox(this Control.ControlCollection controls)
            {
                foreach (Control ctrControl in controls)
                {
                    var obj = ctrControl.GetType();
                    // Se o componente for um dos informados abaixo
                    if (object.ReferenceEquals(obj, typeof(TextBox)) ||
                       (object.ReferenceEquals(obj, typeof(RichTextBox))) ||
                       (object.ReferenceEquals(obj, typeof(ComboBox))) ||
                       (object.ReferenceEquals(obj, typeof(CheckBox))) ||
                       (object.ReferenceEquals(obj, typeof(RadioButton))) ||
                       (object.ReferenceEquals(obj, typeof(ListBox))))
                    {
                        // dispara cria esse evento para o componente
                        ctrControl.Enter += new EventHandler(controlFocus_Enter);
                        ctrControl.Leave += new EventHandler(controlFocus_Leave);
                    }
    
                    RegistroEventsTextBox(ctrControl.Controls);
                }
            }
    
            public static void controlFocus_Leave(object sender, EventArgs e)
            {
                // EVENTO QUE OCORRE AO SAIR DO CAMPO
                (sender as Control).BackColor = Color.White; // Fundo Branco
                (sender as Control).ForeColor = Color.Black; // Letra Preta
            }
    
            private static void controlFocus_Enter(object sender, EventArgs e)
            {
                // evento que ocorre ao entrar no componente
                (sender as Control).BackColor = Color.CornflowerBlue; // Fundo Azul
                (sender as Control).ForeColor = Color.White; // Letra Branca
    
                // Se for TextBox
                if (object.ReferenceEquals((sender as Control).GetType(), typeof(TextBox))) {
                    ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Upper; // DEIXA TUDO MAIUSCULO
                
                    // Se tiver a palavra "email" no nome do campo
                    if (((TextBox)(sender as Control)).Name.ToLower().Contains("email".ToLower()))
                        ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Lower; // tudo minusculo
                }
            }


    Para funcionar, basta chamar antes de abrir o form.

    Form frmCliente = frmClientes();
    
    frmCliente.Controls.RegistroEventsTextBox();
    frmCliente.Show();

    Com certeza vai ajudar muita gente.

    Simples, prático e muito útil

    Valew

    segunda-feira, 25 de julho de 2016 20:06
  • para responder esse tópico da maneira mais simples possível... 

    public static void RegistroEventsTextBox(this Control.ControlCollection controls)
    {
        foreach (Control ctrControl in controls)
        {
            if (object.ReferenceEquals(ctrControl.GetType(), typeof(TextBox)) // SE FOR TEXTBOX
                ctrControl.Enter += new EventHandler(controlFocus_Enter); // cria esse evento para o componente
    
            RegistroEventsTextBox(ctrControl.Controls);
        }
    }
    
    
    private static void controlFocus_Enter(object sender, EventArgs e)
    {
            ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Upper; // DEIXA TUDO MAIUSCULO
        
            if (((TextBox)(sender as Control)).Name.ToLower().Contains("email".ToLower()))
                ((TextBox)(sender as Control)).CharacterCasing = CharacterCasing.Lower; // se for e-mail tudo minusculo
        
    }

    Para funcionar, basta chamar antes de abrir o form.

    Form frmCliente = frmClientes();
    
    frmCliente.Controls.RegistroEventsTextBox();
    frmCliente.Show();


    terça-feira, 26 de julho de 2016 15:04