Array
(
)

Primeira letra em Maiúsculo no textbox

Jair Souza
   - 30 jun 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" ?
#Código

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());
        }

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

*Windows Form C#.

Rafael
   - 30 jun 2014

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;
}

Rafael
   - 01 jul 2014

#Código


Testei aqui e funcionou

Jair Souza
   - 01 jul 2014

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

Jair Souza
   - 02 jul 2014

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

#Código

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 ?

Rafael
   - 02 jul 2014

#Código

           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

Jair Souza
   - 03 jul 2014

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

Clique na imagem para abrir em uma nova janela

Rafael
   - 07 jul 2014

Depois do foreach coloca:

#Código

return resposta();


Att,

Rafael Silva

Jair Souza
   - 07 jul 2014

Aqui ?

Clique na imagem para abrir em uma nova janela

Rafael
   - 07 jul 2014

Clique na imagem para abrir em uma nova janela

Rafael
   - 07 jul 2014

Sendo que é :

#Código

return resposta.ToString();


Att,

Rafael Silva

Jair Souza
   - 07 jul 2014

Tu poderias explicar e comentar cada linha?

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

Rafael
   - 07 jul 2014

#Código

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();
        }
    }

Jair Souza
   - 07 jul 2014

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

Jair Souza
   - 08 jul 2014

O método está assim :

#Código

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 :

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


E deu este erro :

Clique na imagem para abrir em uma nova janela

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

Jair Souza
   - 09 jul 2014

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

#Código

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


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

Rafael
   - 09 jul 2014

Faz o seguinte:

#Código

         private void nomeTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Space)
            {
                txtDescricao.Text = LetraMaiuscula(txtDescricao.Text);
                txtDescricao.SelectionStart = txtDescricao.Text.Length - 1;
            }
        }


Coloca no KeyDown blzz!

Att,

Rafael Silva

Jair Souza
   - 10 jul 2014

No KeyDown, não ficou muito bom, mas no evento leave funciona perfeitamente...