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

textbox kontrola unosa

[es] :: .NET :: textbox kontrola unosa

[ Pregleda: 4714 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

west_herc
west_herc

Član broj: 103549
Poruke: 160
*.tel.net.ba.



Profil

icon textbox kontrola unosa28.11.2006. u 15:21 - pre 211 meseci
Na koji način kontrolirate TextBox. Tj ako unesem float number u textbox ili ako unesem bilo koji broj u textbox da on javi grešku da se tu može unijet samo text. Naravno i obratno.

Hvala
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: textbox kontrola unosa28.11.2006. u 16:18 - pre 211 meseci
Code:

public class TextBoxEx : TextBox
    {
        public enum TextBoxExFilterType : byte
        {
            NoFilter,
            WholeNumber,
            DecimalNumber,
            PositiveWholeNumber,
            PositiveDecimalNumber,
            NegativeWholeNumber,
            NegativeDecimalNumber,
            CustomFilter
        }

        bool _changeInPorgress = false;
        byte _decimalPlaces = 255;
        string _currentFilterPattern = string.Empty;
        string _customFilterPattern = string.Empty;        
        TextBoxExFilterType _filterType = TextBoxExFilterType.NoFilter;

        public TextBoxEx()
        {            
        }

        protected override void OnEnter(EventArgs e)
        {
            this.SelectionStart = 0;
            this.SelectionLength = this.Text.Length;
            
            base.OnEnter(e);
        }

        protected override void OnTextChanged(EventArgs e)
        {
            if (_filterType == TextBoxExFilterType.NoFilter)
                goto End;

            if (_changeInPorgress)
            {                
                _changeInPorgress = false;
                goto End;
            }

            Regex regex = new Regex(_currentFilterPattern);
            string match = regex.Match(this.Text).Value;
            if (match != this.Text)            
            {
                _changeInPorgress = true;
                this.Text = match;            
            }

            End:
                base.OnTextChanged(e);
        }

        // ovo je da se ne bi cuo onaj glubi beep kada se pritisne enter
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.KeyCode == Keys.Enter)
                e.SuppressKeyPress = true;
        }


        protected override void OnKeyPress(KeyPressEventArgs e)
        {            
            if (e.KeyChar == '\b' || _filterType == TextBoxExFilterType.NoFilter)
                goto End;

            StringBuilder sb = new StringBuilder();
            sb.Append(this.Text.Substring(0, this.SelectionStart));
            sb.Append(e.KeyChar);
            sb.Append(this.Text.Substring(this.SelectionStart + this.SelectionLength));
            string text = sb.ToString();

            Regex regex = new Regex(_currentFilterPattern);

            if (regex.Match(text).Value != text)
            {
                e.Handled = true;
                System.Media.SystemSounds.Beep.Play();
            }
            else
                _changeInPorgress = true;

            End:
                base.OnKeyPress(e);
        }        

        [Category("Filter")]
        [DefaultValue(TextBoxEx.TextBoxExFilterType.NoFilter)]
        public TextBoxExFilterType FilterType
        {
            get
            {
                return _filterType;
            }
            set
            {
                _filterType = value;
                _currentFilterPattern = GetFilterPattern(_filterType, _decimalPlaces);
                
                //refresh
                Regex regex = new Regex(_currentFilterPattern);
                this.Text = regex.Match(this.Text).Value;
            }
        }

        [Category("Filter")]
        [DefaultValue("")]        
        public string CustomFilter
        {
            get
            {
                return _customFilterPattern;
            }
            set
            {
                _customFilterPattern = value;
                if (_filterType == TextBoxExFilterType.CustomFilter)
                {
                    _currentFilterPattern = _customFilterPattern;
                    //refresh
                    Regex regex = new Regex(_currentFilterPattern);
                    this.Text = regex.Match(this.Text).Value;
                }
            }
        }

        [Category("Filter")]
        [DefaultValue((byte)255)]        
        public byte DecimaPlaces
        {
            get
            {
                return _decimalPlaces;
            }
            set
            {
                if (value < 1)
                {
                    throw new Exception("Decimal places can not be smaller then 1.");
                }
                _decimalPlaces = value;
                _currentFilterPattern = GetFilterPattern(_filterType, _decimalPlaces);
                
                //refresh
                Regex regex = new Regex(_currentFilterPattern);
                this.Text = regex.Match(this.Text).Value;
            }    
        }

        string GetFilterPattern(TextBoxExFilterType filter, byte decimalPlaces)
        {
            NumberFormatInfo nfi = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat;

            switch (filter)
            {
                case TextBoxExFilterType.NoFilter:
                    return "";

                case TextBoxExFilterType.WholeNumber:
                    return @"[" + nfi.NegativeSign + @"]?\d*";

                case TextBoxExFilterType.DecimalNumber:
                    return @"[" + nfi.NegativeSign + @"]?\d*[" + nfi.NumberDecimalSeparator + @"]?\d{0," + decimalPlaces.ToString() + "}";

                case TextBoxExFilterType.NegativeWholeNumber:
                    return @"[" + nfi.NegativeSign + @"]\d*";

                case TextBoxExFilterType.NegativeDecimalNumber:
                    return @"[" + nfi.NegativeSign + @"]\d*[" + nfi.NumberDecimalSeparator + @"]?\d{0," + decimalPlaces.ToString() + "}";

                case TextBoxExFilterType.PositiveWholeNumber:
                    return @"\d*";

                case TextBoxExFilterType.PositiveDecimalNumber:
                    return @"\d*[" + nfi.NumberDecimalSeparator + @"]?\d{0," + decimalPlaces.ToString() + "}";

                case TextBoxExFilterType.CustomFilter:
                    return _customFilterPattern;
            }

            return "";
        }
    }

Evo ti cela kontrola.
 
Odgovor na temu

west_herc
west_herc

Član broj: 103549
Poruke: 160
*.tel.net.ba.



Profil

icon Re: textbox kontrola unosa28.11.2006. u 20:25 - pre 211 meseci
Neznam za ovo, ali mislim da postoji nešto lakše za korištenje. MASKED TEXTBOX, da se izbjegne logika programiranja uvjeta nego je već sve urađeno.
 
Odgovor na temu

colke77
Dragan Colić
Beograd

Član broj: 74309
Poruke: 194
195.252.107.*



+12 Profil

icon Re: textbox kontrola unosa29.11.2006. u 09:03 - pre 211 meseci
Ja sam napravio custom kontroe koje su nasledjene iz TextBox kontrole, za ove potrebe
Idemo dalje
 
Odgovor na temu

sstanko78
Novi Sad

Član broj: 19139
Poruke: 411
*.tippnet.co.yu.



Profil

icon Re: textbox kontrola unosa29.11.2006. u 09:32 - pre 211 meseci
ili vec gotove TextBoxKontrole koje imaju sve te osobine sto trazis :

http://www.codeproject.com/cs/.../ValidatingTextBoxControls.asp

i to sve sa source-om
 
Odgovor na temu

bobanM
Boban Mikšin
Levi9 Global Sourcing
Novi Sad

Član broj: 61491
Poruke: 39
212.200.221.*



Profil

icon Re: textbox kontrola unosa29.11.2006. u 21:49 - pre 211 meseci
Ako imas potrebu da cesto koristis ovu proveru prilikom unosa, onda je najbolje da poslusas savet od negyxo.

Ako ti treba resenje na brzinu onda west_herc ti je dao super brzo resenje.

Jedino bih predlozio da se u celu pricu iskoristi OnValidating event zajedno sa ErrorProvider-om. Recimo da u datom dogadjaju proveris da li je uneti text validan, ako nije dodaj error text u error provider. Sve to stavis u try catch blok i time na brzinu dobijes resenje koje "lepo izgleda". Mada sam vise za resenje koje je dao negyxo.
nije lepo da budem lud a da to ne znam
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.lanaco.com.



+1 Profil

icon Re: textbox kontrola unosa30.11.2006. u 14:04 - pre 211 meseci
Ja to odradjujem na validate textboxa.
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
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: textbox kontrola unosa05.11.2008. u 19:58 - pre 188 meseci
nije loše ovo gore!!!
Ovih dana pokušavam da skontam i da isprogramiram neke validatore

Pokušavam da napravim ValidtingManager koji u sebi ima ErrorProvider da prikazuje poruke za datu kontrolu.

Sve to zasad lepo radi ali imam jedan problem, trnutno u ValidatingManagaru imam fukciju koja služi da kontroli postavim Validating

Code:

class ValidtingManager {
    ...
    public static void AddVlidation(Control p_control, CancelEventHandler p_ceh)
    {
      ...
      p_control.Validating += p_ceh;
    }


ok i to radi validacija se poziva kada se uđe na kontrolu (uli izlazi mrzi me sada da gledam u help)

Međutim ako se ne prođe preko kontrole validacija se neće pozvati!!!

kako ja da izvršim Validating neke kontrole????

Ovo mi npr treba kada želim da izvršim validaciju cele forme, jer možda su neka polja obavezna a nisu unesena pa ima se zato nije pozvala validating metoda

Na kraju mi je cilj da napravim ValidatingManager kome ću definisati funkcije like ove

public void AddValidating(Control p_control, funkcija_po_kojoj_se_validira)
sorry ne znam kako se ovo prosleđuju delegati ili funkcije pa ovako pišem ali bitan je smisao
Funkcija bi trebala da:
- doda funkcija_po_kojoj_se_validira na Validating prosleđene kontrole
- zapamti sve dodane p_control

public bool ValidateAll()
Funkcija bi trebala da:
- izvrši validaciju svih kontrola koje su dodane i da vrati ukupan rezultat validacije

...

U ovoj klasi napravio bi pool već nekih predefinisanih funkcija za validaciju (EmptyValidator, EmailValidator, NumberValidator raznih vrsta, ...)
tako da bi u konstrukroru neke konkretne forme potrebno bilo samo dodati sledeće npr
Code:

public Form1()
    {
      InitializeComponent();
      _validationManager = new ValidationManager();
      _validationManager.AddVlidation(textBox1, f1);
      _validationManager.AddVlidation(textBox2, f2);
      ...
      _validationManager.AddVlidation(textBoxn, fn);
    }

gde su f1, f2, ... fn funkcije po kojima se validira (bilo iz navedenog pool-a ili neka korisnički definisana)
i validacija gotova

E ostaje mi samo da dobojem odgovor na dva pitanja

1. Kako da ja izvršim Control.Validating ????
2. hehe ima li ko ideju kako da prosledim funkcije

Hvala
 
Odgovor na temu

[es] :: .NET :: textbox kontrola unosa

[ Pregleda: 4714 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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