Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako ograniciti unos vrijednosti na TextBox?

[es] :: .NET :: .NET Desktop razvoj :: Kako ograniciti unos vrijednosti na TextBox?

[ Pregleda: 3503 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

CallMeSaMaster

Član broj: 43611
Poruke: 466
89.146.175.*



+1 Profil

icon Kako ograniciti unos vrijednosti na TextBox?22.11.2009. u 11:46 - pre 175 meseci
Pozdrav,

imam jedan textBox na formi koji sam ogranicio na unos samo brojeva, backspace-a i zareza. Htio bih dodatno da napravim ogranicenje da se nakon
zareza mogu unijeti maximalno dvije decimale.

Recimo ne zelim da moze da se unese vrijednost 3,265, ali da se moze unijeti 3,26 ili samo 3,2. Moze li mi neko primjer dati ili neki link?

Hvala


T
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
93.86.117.*

Jabber: DarkMan


Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?22.11.2009. u 13:08 - pre 175 meseci
Code:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBoxBase textBox = sender as TextBoxBase;
    // dozvola: ctrl+x (24), ctrl+c (3), ctrl+v (22)
    if((int)e.KeyChar == 3 || (int)e.KeyChar == 22 || (int)e.KeyChar == 24) return;
    // zarez tretiraj kao tacku
    if(e.KeyChar == ',') e.KeyChar = '.';
    // dozvoli unos: brojava, znak minus, tacka i backspace
    if(!Char.IsDigit(e.KeyChar) && e.KeyChar != '-' && e.KeyChar != '.' && e.KeyChar != (char)Keys.Back) e.Handled = true;
    // dozvoli samo jednu tacku
    if(e.KeyChar == '.' && textBox.Text.Contains(".")) e.Handled = true;
    // dozvoli samo dve cifre nakon tacke (cifre se i dalje mogu dodavati pre tacke)
    if(Char.IsDigit(e.KeyChar) && textBox.Text.Contains(".") && (textBox.Text.Length - textBox.Text.IndexOf('.')) > 2 && textBox.SelectionStart > textBox.Text.IndexOf('.')) e.Handled = true;
    // dozvoli znak minus samo na pocetku
    if(e.KeyChar == '-' && textBox.SelectionStart != 0) e.Handled = true;
}


Ovo i dalje ne sprecava da korisnika pastuje tekst koji nije u zeljenoj formi. I ako se ukloni prvi red kojim se dozvoljavaju tastaturne precice za cut/copy/paste korisnik i dalje moze da koristi meni koji je dostupan desnim klikom misa na TextBox.
 
Odgovor na temu

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hermes-softlab.com.



+1 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?23.11.2009. u 15:06 - pre 175 meseci
Pozdrav,

hvala za ovu pomoc ali imam jos jedno pitanjce:

Kako mogu da provjerim da li je neko uopce unio cijeli broj ili neki broj sa zarezom?
Npr. da li neko unio samo broj 5? U tom slucau bih ja htio da mi se onLeave eventu utomatski dodaju nule.

Znaci ja unesem recimo 5 ali kad se izgubi focus s tog TextBoxa, da mi se u njemu automatski upise 5,00. Znaci samo u slucaju da nemam broj sa zarezom...
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.ADSL.neobee.net.



+987 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?23.11.2009. u 15:42 - pre 175 meseci
Ceo broj - ima 0 decimalnih tacaka
Float - ima tacno 1 decimalnih tacaka


i samo proveris

textBox1.Text.Contains('.') u Leave dogadjaju...
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.broadband.blic.net.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?23.11.2009. u 18:50 - pre 175 meseci
u Leave dogadjaju...
Code:

      decimal broj;
      if (decimal.TryParse(textBox1.Text, out broj))
      { 
        textBox1.Text = broj.ToString("N2")
      }

 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
93.87.141.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?23.11.2009. u 19:56 - pre 175 meseci
Nije dobro da korisniku zabraniš unos određenih karaktera bez ikakvog feedback-a.
Mnogo je bolje da mu omogućiš unos svih karaktera, a da posle na neki event uradiš validaciju unetog teksta i da korisniku prikažeš poruku ako tekst nije validan. Kao što DarkMan reče, validacija na key_press event-u se veoma lako preskače.

Da bi napravio validaciju gde se može uneti pozitivan ili negativan broj na max. 2 decimale, gde se za decimalni zarez koristi znak ( , ), možeš iskoristiti sledeći regex pattern.
Code:
^[-]{0,1}[\d]+([,]{0,1}[\d]{1,2}){0,1}$

Moguće da mi se potkrala neka greška.

Vodi računa o tome da se za decimalni zarez može koristiti zarez ili tačka. To zavisi od regional setting-a, pa možeš pogledati CultureInfo klasu.
 
Odgovor na temu

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hermes-softlab.com.



+1 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?24.11.2009. u 08:05 - pre 175 meseci
Ok shvatio sam, ali ovo je samo neka test app tako da znam sigurno postavke regional settings-a i mislim da mi nece praviti problem.

Moze li mi neko reci sledece: Imam npr. 10 TextBoxova i htio bih da dodam za svaki Leave EventHandler. Medjutim ne zelim da za svaki TextBox kreiram po jedan Handler nego da dinamicki u codu dodajem hendlere. Recimo da ce se broj boxova s vremenom mijenjat pa ne zelim stalno brisat boxove sa forme.

Ja sam napravio sledece:

Code:
   private void FormData_Load(object sender, EventArgs e)
            {
                foreach (Control c in MyControls.Controls)
                {
                    if (c.GetType().FullName == "System.Windows.Forms.TextBox")
                    {

                        TextBox textBoxControl = (TextBox)c;
                        textBoxControl.Leave += new EventHandler(textBoxControl_Leave);

                    }
                }
            }


Sada sam dodao method koji hendla ovo:

Code:

            private void textBoxControl_Leave(object sender, EventArgs e)
            {
                decimal broj;

                if (decimal.TryParse(????????.Text, out broj))
                {
                    ????????.Text = broj.ToString("N2");
                }
            }


Problem su mi ovi upitnici jer ne znam kako da pristupim toj kontroli odnosno kako da setujem vrijednost Texta u tim boxovima.

Moze li mi neko reci da li ovo moze ovako i kako da uradim taj pristup?

Hvala svima
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?24.11.2009. u 08:17 - pre 175 meseci
ovako
Code:


            private void textBoxControl_Leave(object sender, EventArgs e)
            {
                decimal broj;
                TextBox myTb = (TextBox)sender;
                if (decimal.TryParse(myTb.Text, out broj))
                {
                    myTb.Text = broj.ToString("N2");
                }
            }


[Ovu poruku je menjao Cola dana 24.11.2009. u 09:33 GMT+1]
 
Odgovor na temu

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hermes-softlab.com.



+1 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?24.11.2009. u 08:42 - pre 175 meseci
Hvala , ovo radi.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
93.86.117.*

Jabber: DarkMan


Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?24.11.2009. u 12:33 - pre 175 meseci
Kada imas vise TextBox kontrola za koje hoces istu funkcionalnost onda ne bi bilo lose napraviti modifikovanu verziju TextBox kontrole koju ces koristit umesto regularne verzije.

Na primer:

Code:

    [ToolboxItem(true)]
    [ToolboxBitmap(typeof(TextBox))]
    public class TextBoxDecimal: System.Windows.Forms.TextBox
    {
        private int m_Decimals = 2;
  
        [Description("Decimal values to display.")]
        [DefaultValue(2)]
        public int Decimals
        {
            get { return m_Decimals; }
            set { this.m_Decimals = value; }
        }

        public TextBoxDecimal()
        {
            base.TextChanged += new EventHandler(TextBoxDecimal_TextChanged);
            base.Enter += new EventHandler(TextBoxDecimal_Enter);
            base.Leave += new EventHandler(TextBoxDecimal_Leave);
            base.KeyPress += new KeyPressEventHandler(TextBoxDecimal_KeyPress);
        }

        private void TextBoxDecimal_TextChanged(object sender, EventArgs e)
        {
            ...
        }

        private void TextBoxDecimal_Enter(object sender, EventArgs e)
        {
            ...
        }

        private void TextBoxDecimal_Leave(object sender, EventArgs e)
        {
            ...
        }


        private void TextBoxDecimal_KeyPress(object sender, KeyPressEventArgs e)
        {
            ...
        }
    }

 
Odgovor na temu

peka
Beograd

Član broj: 3947
Poruke: 124
*.dynamic.sbb.rs.



+2 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?24.11.2009. u 15:41 - pre 175 meseci
A zasto jednostavno ne koristis NumericUpDown kontrolu? Ona radi sve to sto ti je potrebno: unos decimalnog broj (sa tackom ili zarezom u zavisnosti od regional settings-a na racunaru), min i max vrijednost i broj decimala. A i ne moras posle da parsujes unijetu vrijednost, nego je samo procitas kao Decimal (numericUpDown1.Value).
IRC is just multiplayer notepad.
 
Odgovor na temu

night-shift
Vukašin Sadžak
• Student FTN, • Software developer
• Futog/Novi Sad

Član broj: 17930
Poruke: 1213
93.87.242.*

Sajt: www.netolerancija.com


+8 Profil

icon Re: Kako ograniciti unos vrijednosti na TextBox?25.11.2009. u 19:10 - pre 175 meseci
^ Solidno rešenje.

Možeš i da ukloniš UpDown dugmiće na toj komponenti. Napraviš novu klasu koja će naslediti NumericUpDown:

Code:
namespace Neki
{
    class MojTextBox : System.Windows.Forms.NumericUpDown
    {

        public MojTextBox() { Controls[0].Visible = false; }
    }
}


Postaviš običan NumericUpDown na formu i onda u Form1.Designer.cs fajlu zameniš NumericUpDown sa MojTextBox i dobićeš ga na formi.
La parole est d'argent, mais le silence est d'or.
www.netolerancija.com
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Kako ograniciti unos vrijednosti na TextBox?

[ Pregleda: 3503 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.