Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 4.043 pregleda

Najnovija ↓

Formatiranje TextBoxa 20.11.2008. u 19:40 · pre 218 meseci #1
Imali neko ideju kako da formatiram TextBox tako da u njega mogu da se ukucavaju samo slova i space, a da je sve ostalo zabranjeno. Takodje, interesuje me da li bi bilo moguce, i kako, da se automatski bez obzira da li su slova ukucana mala ili velika, na izlazu iz TextBoxa dobije uvek ista forma stringa gde je pocetno slovo veliko i slovo koje se nalazi nakon space. Npr, ukucam "MiLAn miSKoviC", a na izlazu kada se taj string upisuje u bazu da e automatski konvertuje u string oblika "Milan Miskovic". Malo je zapetljano, ali se nadam da sam bar delimicno uspeo da objasnim sta mi tacno treba :)
Re: Formatiranje TextBoxa 21.11.2008. u 01:18 · pre 218 meseci #2
Napravis dve odvojene nasledjene klase :
1,) Jedna za formatiranje obicnog teksta i ne-brojeva npr. (FormatStringTextBox )
2.) Jedna za formatiranje imena i malih i velikih slova npr. (FormatNameTextBox )
i za svaku overajdujes OnTextChanged ili OnKeyPress koji se poziva pre samog ispisa u TextBox
Code:

class FormatStringTextBox : TextBox 
 {
      
   protected override void OnTextChanged (EventArgs e)
   {
      base.OnTextChanged (e);
   }
   protected override void OnKeyPress(KeyPressEventArgs e)
   {
       // base.OnKeyPress(e); ili handlujes dalje na OntextChanged znaci ispis se tamo zavrsava 
        //e.Handled = true; ili odustajes od ispisa u text box tj. ne poziva se OnTextChanged 
   }
}
class FormatNameTextBox : TextBox 
{
    protected override void OnTextChanged (EventArgs e)
    {
        //// 
    }
   protected override void OnKeyPress(KeyPressEventArgs e)
   {
       // base.OnKeyPress(e); 
        //    e.Handled = true; 
   }
}
Potpis
Viva lollapalooza
Re: Formatiranje TextBoxa 21.11.2008. u 09:25 · pre 218 meseci #3

A mozes samo da obradis KeyPress event u "obicnom" text box-u, tako da prihvata samo odredjene karaktere.

Code:

       void tb_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsLetter(e.KeyChar) || char.IsWhiteSpace(e.KeyChar))) 
                e.Handled = true;
        }


Re: Formatiranje TextBoxa 21.11.2008. u 09:54 · pre 218 meseci #4
Hvala svima, ali DeerBeer tvoj predlog mi je malo zbunjujuci, dok mi je Igorov dosta prijenciv i lako primenjiv. Ali Igore imasli neku slicnu ideju kako bi mogao realizovati na slican nacin onaj problem oko velikih slova na pocetku unosa i kod unosa nakon space?
Re: Formatiranje TextBoxa 21.11.2008. u 13:45 · pre 218 meseci #5
prilikom unosa u bazu, odradis sledece:
- string.Split tog stringa
-za svaki string u dobijenom nizu, string[0] = Char.ToUpper(string[0])
-ponovo od toga generesise string i upises ga
ili
mozes da nadjes indexe karaktera " " unutar stringa, i onda karaktere iza da kapsujes...
ili
Prilikom handlovanja novog karaktera, gledas da li se postojeci text u textboxu zavrsava na " " ili je prazan. ako jeste, kapsujes taj novi karakter
ili
regularni izrazi

Re: Formatiranje TextBoxa 22.11.2008. u 16:28 · pre 218 meseci
izmenjeno 2 puta, poslednji put bigguy 22.11.2008. u 20:09
  1. bigguy22.11.2008. u 20:09zapis iz teksta poruke
  2. bigguy22.11.2008. u 20:03zapis iz teksta poruke
#6
Mozeli jos malo objasnjenje oko dela koji se odnosi konkretno na:
"
mozes da nadjes indexe karaktera " " unutar stringa, i onda karaktere iza da kapsujes...
ili
Prilikom handlovanja novog karaktera, gledas da li se postojeci text u textboxu zavrsava na " " ili je prazan. ako jeste, kapsujes taj novi karakter
ili
regularni izrazi
"
Ne razumem sta znaci "kapsujes"?

Sada sam probao prvi nacin, sa metodom .Split(), koji mi je delovao prijemciv, ali na kraju sam se zakucao jer on meni podeli pocetni string(recenicu) na delove(reci) iskljucujuci space , ali mi zato dalje ne dozvoljava da reci podelim na slova, jer se metoda .Split() odnosi na separatore, a koji bi separator mogao koristiti u reci? Cak i kad bi mi dozvolio podelu reci na slova nisam bas siguran kako bih uspeo da slova tacno po redu posle vratim u recenicu?!

Ako postoji resenje za ovu podelu vrlo rado bih ga koristio, jer mi je najprihvatljivija iz prostog razloga jer ove druge predloge bas i nisam u celosti skontao :)
Re: Formatiranje TextBoxa 22.11.2008. u 21:54 · pre 218 meseci #7
Najprostije:

Code:


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            StringBuilder text = new StringBuilder(((TextBox)sender).Text);
            for (int i = 1; i < text.Length; i++)
                if (char.IsWhiteSpace(text[i - 1])) text[i] = char.ToUpper(text[i]);

            ((TextBox)sender).Text = text.ToString();
            ((TextBox)sender).SelectionStart = ((TextBox)sender).Text.Length;
        }


Daleko od najefikasnijeg ali dobro obradjuje Copy-Paste situacije.

S obzirom da ti korisnici nece pisati "Rat i Mir" u textbox-u, nema veze sto uvek obradjuje ceo string.
Re: Formatiranje TextBoxa 23.11.2008. u 02:48 · pre 218 meseci #8
sto se ovog resenja tice:

1. ne kapsuje se prvo slovo. treba dodati
Code:
(if (text.Length>0) text[0] = char.ToUpper(text[0]);


2. ovako odokativno imam utisak da ce uleti u infinite loop
Code:
 ((TextBox)sender).Text = text.ToString();
ce svaki put da digne event
Re: Formatiranje TextBoxa 23.11.2008. u 03:03 · pre 218 meseci #9
@bigguy

kapsovanje mi znaci da od malo slovo pretvorim u veliko : a->A

sto se verzije sa splitom tice:
Code:

string [] nizReci  = textbox1.Text.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries);
string rezString=String.Empty; //rezultat
foreach (string str in nizReci)
{
   rezString+=char.ToUpper(str[0])+str.Substring(1,str.Length-1))+' ';
}
return rezString.Trim();

ako ces u textboxu pisati rat i mir, za rezString koristi StringBuilder klasu
Re: Formatiranje TextBoxa 23.11.2008. u 07:26 · pre 218 meseci #10
Citat:



2. ovako odokativno imam utisak da ce uleti u infinite loop




Ne nece. Provereno.
Re: Formatiranje TextBoxa 23.11.2008. u 17:53 · pre 218 meseci #11
Momci ovo super radi :) Hvala.
Ali kako da sada ogranicim da u stringu izmedju dve reci mogu da imam samo jedan space, odnosno, da mogu da pisem "Marko Markovic", a da ne mogu da pisem "Marko Markovic"?
Re: Formatiranje TextBoxa 24.11.2008. u 10:07 · pre 218 meseci #12
ako koristis onaj gore algoritam sto sam ti napisao (sa split), on ce odsece sve suvisne spejsove. a ako ne koristis mozes u nekoj petlji da zoves
Code:

while(true)
{
if (str.IndexOf("  ")>-1)//ako imamo 2 spejsa
str= str.Replace(" ","  ");//zameni 2 spejsa sa jednim
else
break;
}
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme