[ bigguy @ 14.11.2008. 11:57 ] @
Imali neko neki primer kako da formatirm MaskedTextBox u obliku 00.00.0000 i koju cu moci posle da menjam prilikom pokretanja aplikacije. Rec je o tome da u ovom slucaju imam aplikaciju na kojoj je jedan segment unosa datum. Medjutim, datum nije uvek poznat, ili je poznata samo godina pa mi je neophodno obezbediti da unos godine bude nezavisan od ostalog dela teksta.
[ Igor Gajic @ 14.11.2008. 16:30 ] @


http://msdn.microsoft.com/en-u....forms.maskedtextbox.mask.aspx


http://msdn.microsoft.com/en-u...ndows.forms.maskedtextbox.aspx
[ bigguy @ 18.11.2008. 12:12 ] @
Ok. Ovo je super sto sam dobio ali kako da sad oogucimda mi MaskedTextBox ostane prazan i da jednostavno pritiskom na dugme tab predje na naredi TabIndex. Rec je o sledecem, toolTip zbog provere nacina unosa i forme datuma ne dozvoljava da se ostavi prazno polje u okviru MaskedTextBoxa. Kako da prevazidjem ovoj problem? U nastavku dajem kod MaskedTextBoxa:

private void frmUpisPacijenta_Load(object sender, EventArgs e)
{
mtbDatumRodjenja.Mask = "00/00/0000";
mtbDatumRodjenja.MaskInputRejected += new MaskInputRejectedEventHandler(mtbDatumRodjenja_MaskInputRejected);

mtbDatumRodjenja.ValidatingType = typeof(DateTime);
mtbDatumRodjenja.TypeValidationCompleted += new TypeValidationEventHandler(mtbDatumRodjenja_TypeValidationCompleted);
}

private void mtbDatumRodjenja_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
toolTip1.ToolTipTitle = "Pogrešan unos";
toolTip1.Show("Izvinjavamo se, ali samo su brojevi (0-9) prihvatljivi za unos datuma.", mtbDatumRodjenja, mtbDatumRodjenja.Location, 5000);
}

private void mtbDatumRodjenja_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
if (!e.IsValidInput)
{
toolTip1.ToolTipTitle = "Pogrešan unos datuma";
toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
}
[ Igor Gajic @ 18.11.2008. 12:47 ] @
Ukoliko sam razumeo, hoces da u slucaju da nista nije uneseno za datum da predje na sledece polje.

Pogledaj liniju koju sam dodao.

Code:


        private void mtbDatumRodjenja_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
        {
            if (((MaskedTextBox)sender).Text == "  .  .") return; // <---------  !!!!!
            if (!e.IsValidInput)
            {
                toolTip1.ToolTipTitle = "Pogrešan unos datuma";
                toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
                e.Cancel = true;
            }
        }

[ bigguy @ 19.11.2008. 08:32 ] @
Ok to je to ali da li ti nekako pada vec na pamet kako da godinu rodjenja ograncim na unos od 1890. pa navise, ali pritom da datum rodjenja ne sme da bude veci od tekuceg datuma. Nesto sam probao na nacin koji sam izlozio dole ali ne znam kako tacno da konvertujem tekst u MaskedTextBox-u u validan datum za poredjenje (mozda to i ne moze, ali to mi je palo odmah na pamet). Moze jos ova pomoc i obecavam necu vise komplikovati

private void mtbDatumRodjenja_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
DateTime donjaGranica = new DateTime(1890, 12, 12);
DateTime gornjaGranica = DateTime.Now.Date;

if (((MaskedTextBox)sender).Text == " . .") return;
if(!e.IsValidInput)
{
toolTip1.ToolTipTitle = "Pogrešan unos datuma";
toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
if ((DateTime.Parse(mtbDatumRodjenja.Text) < donjaGranica) && (DateTime.Parse(mtbDatumRodjenja.Text) > gornjaGranica))
{
toolTip1.ToolTipTitle = "Pogrešan unos godine rođenja";
toolTip1.Show("Izvinjavamo se, ali godina rođenja koju ste uneli nije validna. molim Vas, proverite godinu koju ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
}
[ sallle @ 20.11.2008. 01:28 ] @
1. taj zadnji if sto si dodao treba da se izvrsava unutar else dela prethodnog if-a.
ovako i ako nije validan input, pokusavas da ga konvertujes i poredis.

2. DateTime.parse ti je culture sensitive, pa je zgodno da zoves overload varijantu: DateTime.Parse(string, IProviderNesto), a unutar ovog iprovidera podesis da ti je format datuma dd/mm/yyyy...
[ bigguy @ 20.11.2008. 12:30 ] @
Sallle poslusao sam i sada mikod izgleda kao sto je dole napisano ali sada mi stalno prijavljuje sledecu gresku kada unesem datum koji ne odgovara da je manji od 12.12.1890. i veci od tekuceg datuma, odnosno kada unesem pravilnu vrednost, on izbacuje:

"The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar."

Imali nade da se iscupam iz ovog problema?

KOD:

private void mtbDatumRodjenja_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
string format = "d";
CultureInfo provider = CultureInfo.InvariantCulture;

DateTime donjaGranica=new DateTime(1890,12,12);
DateTime gornjaGranica=DateTime.Now.Date;


if (((MaskedTextBox)sender).Text == " / /") return;
if (!e.IsValidInput)
{
toolTip1.ToolTipTitle = "Pogrešan unos datuma";
toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
else
{
if (DateTime.Compare((DateTime.ParseExact(mtbDatumRodjenja.Text, format, provider)), donjaGranica) < 0)
{
toolTip1.ToolTipTitle = "Pogrešan unos datuma";
toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Datum mora biti u intervalu od 12.12.1890. do tekuceg datuma. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
if (DateTime.Compare((DateTime.ParseExact(mtbDatumRodjenja.Text, format, provider)), gornjaGranica) > 0)
{
toolTip1.ToolTipTitle = "Pogrešan unos datuma";
toolTip1.Show("Izvinjavamo se, ali datum koji ste uneli nije validan. Datum mora biti u intervalu od 12.12.1890. do tekuceg datuma. Molim Vas, proverite datum koji ste uneli.", mtbDatumRodjenja, 5000);
e.Cancel = true;
}
}
}
[ bigguy @ 20.11.2008. 18:29 ] @
Problem je resen Greska je bila u formatu datuma, a ja sam je uporno trazio na drugom mestu. Hvala svima
[ bigguy @ 10.12.2008. 17:20 ] @
Momci imam novi problem iz ove oblasti. Rec je o formatiranju MaskedTextBox-a za slucaj maila i telefona. Naime, kod maila broj karaktera ispred znaka "@" je promenjiv, a to mi komplikuje stvar. Taman sam mislio da sam skontao MaskedTextBox kad ono nov problem. Isto je rec i sa brojem telefona. I kod njega broj karaktera varira. Za sada sam privremeno sve ovo resio sa koriscenjem TextBox-a u kojem po pokretanju insertujem znak "@" kod maila ili znak "( )" kod telefona, ali moram dodati da nisam bas zadovoljan ovim resenjem jer korisnik moze te znake greskom izbrisati pa samim tim napraviti problem. Imali neko neki predlog?
[ sallle @ 11.12.2008. 01:28 ] @
pogledaj namespace: System.Text.RegularExpressions, klasa: Regex
smisli svoj neki regularni izraz za e-mail, ili nadji neki preko googla.
[ bigguy @ 11.12.2008. 12:28 ] @
Hvala sallle to je to. Hvala