Primeira letra em Maiúsculo no textbox

30/06/2014

Boa tarde, tenho este código que coloca a primeira letra de cada palavra em maiúsculo, quando se digita no text box, "joão da silva" ou "JOÃO DA SILVA", fica "João Da Silva", mas gostaria de que as preposições "de, da, do, das, dos..." ficassem em minúsculo, como fazer isso usando este código que já tenho e ter este resultado "João da Silva" ?

public string ConvMaiuscula(string Input)
        {
            System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
            return textInfo.ToTitleCase(Input.ToLower());
        }


private void nomeTextBox_TextChanged(object sender, EventArgs e)
        {
            nomeTextBox.Text = ConvMaiuscula(nomeTextBox.Text).ToString();
            nomeTextBox.SelectionStart = nomeTextBox.Text.Length;
        }


*Windows Form C#.

Jair Souza

Respostas

30/06/2014

Rafael

if (Input == "de" || Input == "da" || Input == "das" || Input == "dos")
{
System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
return textInfo.ToTitleCase(Input.ToLower());
}
else
{
return Input;
}
Responder Citar

01/07/2014

Rafael


Testei aqui e funcionou
Responder Citar

01/07/2014

Jair Souza

Agora não estou na minha máquina, vou testar hoje á noite, muito obrigado pelo seu interesse em ajudar.
Responder Citar

02/07/2014

Jair Souza

Bom dia,
Ajustei o código e ficou assim :

public string ConvMaiuscula(string Input)
        {
		if (Input == "de" || Input == "da" || Input == "do" || Input == "das" || Input == "dos")
		{
            System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
            return textInfo.ToTitleCase(Input.ToLower());
        }
		else
	  {
		return Input;
	}

E chamando o método no textchanged do textbox :

	   private void nomeTextBox_TextChanged(object sender, EventArgs e)
        {
            nomeTextBox.Text = ConvMaiuscula(nomeTextBox.Text).ToString();
            nomeTextBox.SelectionStart = nomeTextBox.Text.Length;
        }



Quando digito “joão da silva” o resultado é “joão da silva”, não muda nada...

Se digitar no início do textbox “da” fica “Da”.

Se digitar “da de do ...” fica “Da de do”, a primeira letra da preposição fica em Maiúscula, mas nada mais...

Mas repetindo, o que preciso é que independente de como for digitado maiúscula, minúsculas ou misturado
Que fique a primeira letra de cada palavra em Maiúscula e as demais em minúsculas(São nomes de pessoas), mas somente as preposições “de, da, do, das, dos” fiquem sempre em minúscula...assim : “João da Silva de Linhares dos Santos”.

Será que tem como ?
Responder Citar

02/07/2014

Rafael

           String testo = "olá meu amido da devmedia, testa para ver se da certo";
           StringBuilder resposta = new StringBuilder();

            string[] beg = testo.Split(' ');

            foreach (string s in beg)
            {
                // Aqui você coloca as preposições
                if (!(s.Equals("de") ||
                    s.Equals("da") ||
                    s.Equals("do") ||
                    s.Equals("dos") ||
                    s.Equals("das")))
                {
                    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
                    resposta.Append(textInfo.ToTitleCase(s.ToLower()));
                }
                else
                {
                    resposta.Append(s);
                }

                resposta.Append(" ");
            }

            resultado = Olá Meu Amido da Devmedia, Testa Para Ver Se da Certo



Espero ter ajudado.

Att,

Rafael Silva
Responder Citar

03/07/2014

Jair Souza

Não consegui testar está dando este erro...note que este método preciso aplicar no evento textchanged do textbox :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140703-204330.png[/img]
Responder Citar

07/07/2014

Rafael

Depois do foreach coloca:


return resposta();


Att,


Rafael Silva
Responder Citar

07/07/2014

Jair Souza

Aqui ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140707-113033.png[/img]
Responder Citar

07/07/2014

Rafael

[img]http://arquivo.devmedia.com.br/forum/imagem/264793-20140707-120140.png[/img]
Responder Citar

07/07/2014

Rafael

Sendo que é :

return resposta.ToString();


Att,


Rafael Silva
Responder Citar

07/07/2014

Jair Souza

Tu poderias explicar e comentar cada linha?

Algumas não entendi..., na realidade só entendi o if...
Responder Citar

07/07/2014

Rafael

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(LetraMaiuscula("teste de texto"));
            Console.Read();
        }

        public static string LetraMaiuscula(string texto)
        {
            //Sequência mutável de caracteres
            StringBuilder resposta = new StringBuilder();

            // Divide seu texto em partes e tranforma em um array
            string[] beg = texto.Split(' ');


            // Se for preposição retorna sem alteração, se não, retorna a palavra com a primeira letra maiúscula
            foreach (string s in beg)
            {
                // Aqui você coloca as preposições                
                if (!(s.Equals("de") ||
                    s.Equals("da") ||
                    s.Equals("do") ||
                    s.Equals("dos") ||
                    s.Equals("das")))
                {
                    // Seta a primeira letra maiúscula
                    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
                    resposta.Append(textInfo.ToTitleCase(s.ToLower()));
                }
                else
                {
                    //retorna a preposição sem alteração
                    resposta.Append(s);
                }

                //retorna os respectivos espaçamentos
                resposta.Append(" ");
            }

            //retorna o texto alterado
            return resposta.ToString();
        }
    }
Responder Citar

07/07/2014

Jair Souza

Este método preciso aplicar no evento textchanged do textbox, para que seja alterado o texto durante a digitação no textbox...pode ser ?
Responder Citar

08/07/2014

Jair Souza

O método está assim :

public string convMaiuscula(string texto)
         {
            StringBuilder resposta = new StringBuilder();
 
            string[] beg = texto.Split(' ');
 
            foreach (string s in beg)
            {
                if (!(s.Equals("de") || s.Equals("da") || s.Equals("do") || s.Equals("dos") || s.Equals("das") || s.Equals("e")))
                {
                    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;
                    resposta.Append(textInfo.ToTitleCase(s.ToLower()));
                }
                else
                {
                    resposta.Append(s);
                }
                    resposta.Append(" ");
            }
            return resposta.ToString();
        }



E chamo no evento texchanged do textbox assim :

private void nomeTextBox_TextChanged_1(object sender, EventArgs e)
        {
            nomeTextBox.Text = convMaiuscula(nomeTextBox.Text).ToString();
            nomeTextBox.SelectionStart = nomeTextBox.Text.Length;
         }


E deu este erro :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140708-075204.png[/img]

...não está fácil...
Responder Citar

09/07/2014

Jair Souza

Tentei mais estas, e dá o mesmo erro...

private void nomeTextBox_TextChanged(object sender, EventArgs e)
        {
            nomeTextBox.Text = convMaiuscula(nomeTextBox.Text);
            nomeTextBox.SelectionStart = nomeTextBox.Text.Length;
         }


private void nomeTextBox_TextChanged(object sender, EventArgs e)
        {
            nomeTextBox.Text = nomeTextBox.Text.convMaiuscula();
            nomeTextBox.SelectionStart = nomeTextBox.Text.Length;
         }
Responder Citar