Primeira letra em Maiúsculo no textbox
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" ?
*Windows Form C#.
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
Curtidas 0
Respostas
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;
}
{
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
30/06/2014
Testei aqui e funcionou
GOSTEI 0
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
30/06/2014
Bom dia,
Ajustei o código e ficou assim :
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 ?
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
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
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]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140703-204330.png[/img]
GOSTEI 0
Rafael Souza
30/06/2014
Depois do foreach coloca:
Att,
Rafael Silva
return resposta();
Att,
Rafael Silva
GOSTEI 0
Jair Souza
30/06/2014
Aqui ?
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140707-113033.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140707-113033.png[/img]
GOSTEI 0
Rafael Souza
30/06/2014
[img]http://arquivo.devmedia.com.br/forum/imagem/264793-20140707-120140.png[/img]
GOSTEI 0
Rafael Souza
30/06/2014
Sendo que é :
Att,
Rafael Silva
return resposta.ToString();
Att,
Rafael Silva
GOSTEI 0
Jair Souza
30/06/2014
Tu poderias explicar e comentar cada linha?
Algumas não entendi..., na realidade só entendi o if...
Algumas não entendi..., na realidade só entendi o if...
GOSTEI 0
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
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
30/06/2014
O método está assim :
E chamo no evento texchanged do textbox assim :
E deu este erro :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20140708-075204.png[/img]
...não está fácil...
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
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
30/06/2014
Faz o seguinte:
Coloca no KeyDown blzz!
Att,
Rafael Silva
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
30/06/2014
No KeyDown, não ficou muito bom, mas no evento leave funciona perfeitamente...
GOSTEI 0