| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
C sharp Validaattori esim Textboxilleempty 31.12.04 11:57 Validaattori laajentaa esimerkikei textbox luokan ominaisuuksia. Mutta voidaan käyttää myös minkä tahansa muun Control luokan kanssa
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. |
![]() Haku
|