C sharp Validaattori esim Textboxille

empty 31.12.04 11:57

Validaattori laajentaa esimerkikei textbox luokan ominaisuuksia. Mutta voidaan käyttää myös minkä tahansa muun Control luokan kanssa

 Tekstiversio  Arvo: -2 (2 ääntä)  Äänestä: +  -
using System;

namespace GuiObjektit
{
        /// <summary>
        /// Merkkivalidaattori toteuttaa lisävalidointiominaisuuksia komponenteille.
        /// Yleinen käyttö on textboxin toimintojen laajentaminen.
        ///
        /// ver.       0.1      20.11.2004    Ensimmäinen versio
        ///           0.2   09.12.2004       Remontoidaan luokka täysin, nopeus nousee huomattavasti
        ///                                yhteensopiva versioiden 0.1x kanssa.
        ///           0.201       10.12.2004      Korjataan muutamia virheitä. Muunnetaan toimimaan delegaatin
        ///                                kutsusta, näin saavutetaan helpompi käytettävyys. Kuningaskunta
        ///                                moniperinnästä!!!
        ///           0.202       13.12.2004      Ylikirjoitetaan toinen muodostin luokalle. Luokan käyttöönotto
        ///                                on nyt entistä helpoimpi. Alaspäin yhteensopivuus säilytetään.
        ///
        /// Tunnettuja ongelmia:
        ///                                   Mikäli Onlyxxx -osuus joutuu puuttumaan tekstin sisältöön kelautuu
        ///                                   osoitin kentän alkuun. Tämä on kierrettävissä mutta koodi monimutkistuu
        ///                                   huomattavasti eikä luokka ole yhtä helppo käyttää.
        ///
        ///                                   Myös Noxxx ja Onlyxxx osioiden sopivalla sekakäytöllä saattaa saada
        ///                                   ei toivottuja toimintoja.
        ///
        /// @author Mika Karjunen
        ///
        /// ////////////////////////Esimerkki käytöstä, versio 0.202:////////////////////////
        ///     
        ///
        /// //Peritään luokka johon halutaan lisäominaisuuksia, tässä tapauksessa
        /// //se on TextBox
        /// class ExtendedTextbox : System.Windows.Forms.TextBox
        /// {
        ///          private GuiObjektit.Merkkivalidaattori m_pTextformulaValidator;
        ///          
        ///          public TextBoxExtended()
        ///          {
        ///               this.m_pTextformulaValidator = new Merkkivalidaattori( this );
        ///          }
        ///               
        ///          public GuiObjektit.Merkkivalidaattori Validator
        ///          { get{ return this.m_pTextformulaValidator; } }
        ///               
        /// }
        ///
        /// Käyttäminen:
        /// ExtendedTextBox test = new ExtendedTextbox();       //uusi ilmentymä
        /// test.Validator.NoLetters = true;                //kielletään kirjaimien käyttäminen
        ///
        ///
        ///
        /// </summary>
        public class Merkkivalidaattori
        {
                private bool m_bNoLetters;      //ei kirjaimia
                private bool m_bNoNumbers;      //ei numeroita
                private bool m_bNoControl;      //ei kontrollia esim. pyyhintä
                private bool m_bNoDigit;        //
                private bool m_bNoLower;        //ei pieniä kirjaimia
                private bool m_bNoPunctuation;  //ei välimerkkejä
                private bool m_bNoSeparator;    //ei erotinta
                private bool m_bNoSurrogate;    //ei korviketta
                private bool m_bNoSymbol;              //ei symbolia
                private bool m_bNoUpper;                //ei suurta kirjainta
                private bool m_bNoWhiteSpace;   //ei väliä
               
                private bool m_bOnlyDecimalNumber; //sallii ainoastaan desimaalinnumeron syötön. esim 56,67
               
                private string m_strPreviousContent;    //sisältää tiedon edellisestä merkkijonosta.
                       
               
                public Merkkivalidaattori( System.Windows.Forms.Control control ) : this()
                {
                        control.KeyPress        += new System.Windows.Forms.KeyPressEventHandler( this.KeyPress );
                        control.TextChanged += new EventHandler( this.TextChanged );
                }
               
                public Merkkivalidaattori()
                {
                        this.m_bNoLetters       = false;
                        this.m_bNoNumbers       = false;
                        this.m_bNoControl       = false;
                        this.m_bNoDigit  = false;
                        this.m_bNoLower  = false;
                        this.m_bNoPunctuation   = false;
                        this.m_bNoSeparator          = false;
                        this.m_bNoSurrogate          = false;
                        this.m_bNoSymbol                = false;
                        this.m_bNoUpper   = false;
                        this.m_bNoWhiteSpace    = false;
                       
                        this.m_strPreviousContent = "";
                }
               
                public void KeyPress( object sender, System.Windows.Forms.KeyPressEventArgs e )
                { e.Handled = this.Validoi( e.KeyChar ); }
               
                public void TextChanged( object sender, EventArgs e )
                {
                        System.Windows.Forms.Control control;
                        control = (System.Windows.Forms.Control)sender;
                       
                        string str = control.Text;
                       
                        if( str.Length <= 0 )
                        { this.m_strPreviousContent = ""; return; }
                       
                        if( this.m_bOnlyDecimalNumber && !this.AcceptOnlyDecimalNumber( ref str ) ){ control.Text = this.m_strPreviousContent; } else
                        ;//if(){} else Lisätoiminnot tähän kuten ylläkin
                       
                        this.m_strPreviousContent = control.Text;       
                }
               
                protected bool Validoi( char c )
                {
                        if( this.m_bNoNumbers      && char.IsNumber( c )) {   return true; } else
                        if( this.m_bNoLetters      && char.IsLetter( c )) {   return true; } else
                        if( this.m_bNoControl      && char.IsControl( c )){   return true; } else
                        if( this.m_bNoDigit               && char.IsDigit( c )){              return true; } else
                        if( this.m_bNoLower               && char.IsLower( c )){              return true; } else
                        if( this.m_bNoPunctuation       && char.IsPunctuation( c )){return true; } else
                        if( this.m_bNoSeparator  && char.IsSeparator( c )){       return true; } else
                        if( this.m_bNoSurrogate  && char.IsSurrogate( c )){       return true; } else
                        if( this.m_bNoSymbol        && char.IsSymbol( c )){          return true; } else
                        if( this.m_bNoUpper               && char.IsUpper( c )){              return true; } else
                        if( this.m_bNoWhiteSpace        && char.IsWhiteSpace( c )){ return true; } else
                                                                       
                        return false;
                }
                                                               
                protected bool AcceptOnlyDecimalNumber( ref string str )
                {
                        if( str.Length == 1 && str[0].Equals( '-' ) ){ return true; }
                       
                        double lfTmp;
                        return double.TryParse( str,
                                                                        System.Globalization.NumberStyles.AllowDecimalPoint |
                                                                        System.Globalization.NumberStyles.AllowLeadingSign,
                                                                        System.Globalization.NumberFormatInfo.CurrentInfo,
                                                                        out lfTmp );
                }
               
                public bool NoLetters
                {
                        get{ return this.m_bNoLetters}
                        set{ this.m_bNoLetters = value; }
                }
                public bool NoNumbers
                {
                        get{ return this.m_bNoNumbers}
                        set{ this.m_bNoNumbers = value; }
                }
                public bool NoControl
                {
                        get{ return this.m_bNoControl}
                        set{ this.m_bNoControl = value; }
                }
                public bool NoDigit
                {
                        get{ return this.m_bNoDigit}
                        set{ this.m_bNoDigit = value; }
                }
                public bool NoLower
                {
                        get{ return this.m_bNoLower}
                        set{ this.m_bNoLower = value; }  
                }
                public bool NoPunctuation
                {
                        get{ return this.m_bNoPunctuation}
                        set{ this.m_bNoPunctuation = value; }
                }
                public bool NoSeparator
                {
                        get{ return this.m_bNoSeparator}
                        set{ this.m_bNoSeparator = value; }
                }
                public bool NoSurrogate
                {
                        get{ return this.m_bNoSurrogate}
                        set{ this.m_bNoSurrogate = value; }
                }
                public bool NoSymbol
                {
                        get{ return this.m_bNoSymbol}
                        set{ this.m_bNoSymbol = value; }
                }
                public bool NoUpper
                {
                        get{ return this.m_bNoUpper}
                        set{ this.m_bNoUpper = value; }
                }
                public bool NoWhiteSpace
                {
                        get{ return this.m_bNoWhiteSpace}
                        set{ this.m_bNoWhiteSpace = value; }
                }
                public bool OnlyDecimalNumber
                {
                        get{ return this.m_bOnlyDecimalNumber}
                        set{ this.m_bOnlyDecimalNumber = value; }
                }
               
               
        }
}

Siinähän se. Pituuttahan sille tuli mutta pyrin selvyyteen. Omat ongelmansakin löytyvät, jotka onkin kirjattu tuonne ylemmäs.