Primeira letra em Maiúsculo no textbox

.NET

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

Jair Souza

Curtidas 0

Respostas

Rafael Souza

Rafael Souza

30/06/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;
}
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014


Testei aqui e funcionou
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

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

Jair Souza

30/06/2014

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 ?
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

           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
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

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]
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

Depois do foreach coloca:


return resposta();


Att,


Rafael Silva
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

Aqui ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140707-113033.png[/img]
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

[img]http://arquivo.devmedia.com.br/forum/imagem/264793-20140707-120140.png[/img]
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

Sendo que é :

return resposta.ToString();


Att,


Rafael Silva
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

Tu poderias explicar e comentar cada linha?

Algumas não entendi..., na realidade só entendi o if...
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

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();
        }
    }
GOSTEI 0
Jair Souza

Jair Souza

30/06/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 ?
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

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...
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

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;
         }
GOSTEI 0
Rafael Souza

Rafael Souza

30/06/2014

Faz o seguinte:

         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
GOSTEI 0
Jair Souza

Jair Souza

30/06/2014

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