Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 11.12.2014, 19:29   #1
Goonotora
Član
 
Član od: 15.10.2007.
Lokacija: Novi Beograd
Poruke: 145
Zahvalnice: 19
Zahvaljeno 4 puta na 4 poruka
Question Da li ovo stvara compile error u C#?

Pozz svima.

Radeci jedan zadatak naisao sam na gresku koja ne bi trebalo da se pojavi. U svoj WinForms projekat sam uneo dogadjaj KeyPress koji bi trebao da onemoguci unos svega sem brojeva u TextBox kontrolu (u kodu obelezena sa tbGodRodjenja). Ovo je deo koda koji stvara problem:

Kod:
private void tbGodRodjenja_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Information.IsNumeric(e.KeyChar) || e.KeyChar == '\b')
            {
                e.Handled = true;
            }
            else
            {
                e.Handled = false;
            }
        }
Deo oznacen crvenom bojom prijavljuje gresku Compile Error CS0103 ("The name 'identifier' does not exist in the current context"), a neobicno je to sto sam medju "using" direktive uneo

Kod:
using Microsoft.VisualBasic;
u kome se nalazi klasa Information.

Ovo se pojavljuje u MS Visual Studio 2010 i 2012.
Goonotora je offline   Odgovor sa citatom ove poruke
Stara 11.12.2014, 22:46   #2
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.163
Zahvalnice: 2.081
Zahvaljeno 4.922 puta na 2.858 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Šta bude ako ne koristiš IsNumeric nego proveravaš sa > '0' && < '9' ?

Alternativno, probaj i Decimal.TryParse.
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 11.12.2014, 23:11   #3
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

a i godina rođenja ti je date a ne number
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 11.12.2014, 23:23   #4
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
water wizard kaže: Pregled poruke
a i godina rođenja ti je date a ne number
Ako barata samo sa godinama a ne punim datumima onda je integer (ili cast stringa u integer) ispravan izbor jer su primitivni tipovi podataka tipa integer daleko efikasniji od kompleksnih tipa Date.
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 11.12.2014, 23:28   #5
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

ali zahteva dodatne provere i konverzije ako se jednom seti da za nešto koristi taj podatak.. a i ne verujem da će nešto da se mnogo muči kompjuter sa tim podacima bilo da su tipa int ili date ne pravi on ovde ne znam kakvu enterprise aplikaciju pa da štedi
Cela logika je pogrešna, umesto da izabere datum on traži od korisnika da upisuje brojeve i onda to vodi do ovog koda koji je napisao
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 0:09   #6
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
water wizard kaže: Pregled poruke
ali zahteva dodatne provere i konverzije ako se jednom seti da za nešto koristi taj podatak..
Kakve dodatne provere i konverzije? Jedino što ti treba za Int32 je TryParse metoda koja je overloadovana i neuporedivo jednostavnija od pune inicijalizacije Date tipa podatka.
Citat:
water wizard kaže: Pregled poruke
a i ne verujem da će nešto da se mnogo muči kompjuter sa tim podacima bilo da su tipa int ili date ne pravi on ovde ne znam kakvu enterprise aplikaciju pa da štedi
Samo zato što nešto možeš loše da uradiš ne mora da znači da treba tako da uradiš. SQL Server recimo nudi standardne Date/Time tipove podataka pa ćeš opet naći gomilu DB projekata koji umesto njih koriste integer za skladištenje UNIX timestampa jer je integer kao tip podatka neuporedivo efikasniji. Raskrsnica između amaterizmna i profesionalizma se povećava shvatanjem kakav trade-off praviš svakom svojom odlukom.
Citat:
water wizard kaže: Pregled poruke
Cela logika je pogrešna, umesto da izabere datum on traži od korisnika da upisuje brojeve i onda to vodi do ovog koda koji je napisao
I tu će ti svaki UX designer vredan svoje plate reći da je trpanje combo box-a sa 100+ podataka (godina) užasno iskustvo za korisnika.
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 0:44   #7
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

možemo mi sad da se ne složimo šta je najbolje, i najlakše jer može da se programira na mnogo načina, ja imam svoj pogled na to ali ne bavim se više time ponekad pročitam neku knjigu pa neću da namećem svoje mišljenje
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 1:48   #8
brano88
Član
 
Član od: 1.7.2014.
Lokacija: Bijeljina
Poruke: 228
Zahvalnice: 26
Zahvaljeno 59 puta na 46 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Gledam upravo slicno pitanje na stackoverflowu. Pitam se sta bi bilo kada bi korisnik "zalijepio" vrijednost umjesto sto bi je otkucao.

Relativno sam pocetnik u C#, ali moje iskustvo na polju UI dizajna kaze da ne treba da koristis TextBox (kao sto i ostali clanovi foruma kazu :P).
Ukoliko zelis da prikazes precizan datum, koristi DateTimePicker.
Ukoliko zelis da prikazes samo godinu, mozda je najbolje rjesenje da koristis NumericUpDown
brano88 je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 1:54   #9
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

baš tako čim daš korisniku mogućnost da unosi nešto u polje to moraš da proveravaš, šta ako unese 98 ili 1969 ili 3 ili pastuje tekst
Ovako ima ponuđeno šta može da izabere i gotovo ne moraš da misliš šta sve može da se desi.. pomnoži to sa svakim poljem za koje ćeš morati da radiš proveru i videćeš koliko posla praviš sam sebi
Ili da moraš da izračunaš dal ima 18 ..

Poslednja ispravka: water wizard (12.12.2014 u 2:02)
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 2:37   #10
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
water wizard kaže: Pregled poruke
baš tako čim daš korisniku mogućnost da unosi nešto u polje to moraš da proveravaš, šta ako unese 98 ili 1969 ili 3 ili pastuje tekst
Zamisli treba ti ceo red za takvu proveru (još sam dodao proveru opsega)

Kod:
int year;
const int minYear = 1900;
            
if(!(Int32.TryParse(godina.Text, out year) && year <= DateTime.Now.Year && year >= minYear)) {
    // neispravan datum
}
Citat:
brano88 kaže: Pregled poruke
Gledam upravo slicno pitanje na stackoverflowu. Pitam se sta bi bilo kada bi korisnik "zalijepio" vrijednost umjesto sto bi je otkucao.
Za to se koriste Control events. U zavisnosti od toga koja kontrola je u pitanju zna se automatski koji event je najpogodnije slušati u kojoj situaciji. Recimo, ako postoji mogućnost da neko jednostavno "nalepi" godinu u kontrolno polje onda je pametnije slušati tzv. TextChanged event.

Poslednja ispravka: Neutrino (12.12.2014 u 2:55)
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 3:04   #11
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

jeste red po red za svako polje nakupi se.. ali poštujem, svako ima svoj stil ja gledam da sve nepotrebno izbacim.. a i taj textchange event se pali za svaku promenu bolje da radi proveru kad se promeni fokus na drugu kontrolu ili kad klikne next/finish

Niko nije otporan na bagove bilo je problem i na facebooku kad je neka starica htela da otvori nalog pa nisu prihvatali da je rođena u 19 veku.. pretpostavljam da su koristili istu logiku od koliko do koliko int je dozvoljeno.. ali sve se to vraća kao bumerang jer posle moraš da ispravljaš logiku aplikacije ...

Poslednja ispravka: water wizard (12.12.2014 u 3:11)
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 3:07   #12
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
water wizard kaže: Pregled poruke
a i taj textchange event se pali za svaku promenu bolje da radi proveru kad se promeni fokus na drugu kontrolu ili kad klikne next/finish
Netačno. Event handler se okida samo kad se promeni vrednost TextBox kontrole za koju je definisan event u kodu.
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 3:18   #13
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

pa to kad se promeni vrednost u kontroli znači za svaki pritisak tastera na tastaturi možeš da proveriš lako
on textbox.textchange msgbox(...
i onda probaj da ukucaš nešto za svako slovo/broj ima da ti iskače msgbox
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 15:48   #14
brano88
Član
 
Član od: 1.7.2014.
Lokacija: Bijeljina
Poruke: 228
Zahvalnice: 26
Zahvaljeno 59 puta na 46 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
pa to kad se promeni vrednost u kontroli znači za svaki pritisak tastera na tastaturi možeš da proveriš lako
on textbox.textchange msgbox(...
i onda probaj da ukucaš nešto za svako slovo/broj ima da ti iskače msgbox
Zasto mora da mu iskace MessageBox? Moze jednostavno da promijeni boju TexBox-a u npr. crvenu u slucaju pogresnog unosa. Ili jos dodatno da stavi Label s desne strane koja ce prikazati tekst upozorenja ukoliko je korisnik napravio pogresan unos. Mislim da je mnogo vise "user friendly".
brano88 je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 16:45   #15
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

da bi video koliko puta se dešava event, jednom kad promeni boju boja više neće da se menja pa će da ima osećaj kao da se event nije opet desio kad ukuca sledeći karakter
Ovo je debuging a ne UI

U suštini nije nešto mnogo bitno kao ni koji je data type ali vodi do različitih rešenja i komplikovanja ipak nije baš najbolje kad za svaki keypress radiš proveru ako nije potrebno, zna se kad se proverava ili kad kontrola gubi focus ili na kraju popunjavanja svih polja

Poslednja ispravka: water wizard (12.12.2014 u 16:58)
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 12.12.2014, 17:34   #16
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Citat:
water wizard kaže: Pregled poruke
da bi video koliko puta se dešava event, jednom kad promeni boju boja više neće da se menja pa će da ima osećaj kao da se event nije opet desio kad ukuca sledeći karakter
Ovo je debuging a ne UI
Event handleri se okidaju svaki put kad nastupi event nad kontrolom tako da to nije problem. Evo konkretnog primera.

Kod:
private void godina_TextChanged(object sender, EventArgs e)
{
    // Resetovanje stilizacije kontrole.
    godina.ForeColor = Color.Empty;

    /*
     * Provera se vrši samo kada dužina stringa za godinu dostigne maksimalnu dužinu od 4 karaktera.
     * Maksimalna dužina se podešava u Properies dijalogu kontrole.
     */
    if (godina.TextLength < godina.MaxLength) {                
        return;
    }

    int year;
    // Minimalna vrednost za godinu.
    const int minYear = 1900;
    
    /*
     * Ukoliko je godina neispravna ili pada van opsega između minYear i trenutne godine tekst kontrole se boji crveno.
     * U suprotnom se resetuje na default boju.
     */
    if(!(Int32.TryParse(godina.Text, out year) && year <= DateTime.Now.Year && year >= minYear)) {
        godina.ForeColor = Color.Red;
    }
    else
    {
        godina.ForeColor = Color.Empty;
    }   
}
Da se razumemo, ovo je veoma jednostavan način realizacije polja za godinu. Postoje mnogo elegantnija rešenja. Recimo ako će se polje za godinu ponavljati na više mesta onda može da se napravi izvedena klasa TextBox kontrole u okviru koje će da se implementira recimo nekakva Validate() metoda. Na taj način rešavanje problema validacije godine se svodi na jednostavno instanciranje te klase svuda gde je potrebna.
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 12.12.2014, 17:58   #17
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.473
Zahvalnice: 433
Zahvaljeno 4.005 puta na 3.727 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

eto već ima dosta da se kuca
Diskutujemo, ne kritikujem niti opravdavam šta i kako treba da se razumemo niti se pravim pametan
Zadovoljstvo mi je da razmenjujem mišljenja sa ljudima koji se ovim bave pa ono..

Malo smo skrenuli sa teme pošto čovek radi zadatak ali neće da mu smeta što smo i logiku malo protresli
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 13.12.2014, 12:59   #18
Goonotora
Član
 
Član od: 15.10.2007.
Lokacija: Novi Beograd
Poruke: 145
Zahvalnice: 19
Zahvaljeno 4 puta na 4 poruka
Određen forumom Re: Da li ovo stvara compile error u C#?

Hvala Vam na odgovorima, i ja vam se izvinjavam sto nisam dodao vise detalja oko problema.

Zadatak je naime iz zbirke moje skole. Dizajnirao sam formu, i prema uslovima zadatka je trazeno da se godina rodjenja unese kroz kontrolu TextBox. Takodje je trazeno da se obezbedi funkcionalnost da korisnik ne moze nista da unese u tu kontrolu sem brojeva i da se koristi dogadjaj KeyPress. Jedini problem u gorenavedenom kodu je "greska" koja se pojavljuje (a takvo resenje je dato u zbirci, ja sam ga na drugi nacin resio).

Znaci moje pitanje je bilo zasto dolazi do takve greske, jer sam adekvatno naveo namespace klase Information. Da li jos nesto nedostaje, posto u C# projekat ubacujem klasu iz Visual Basic-a?
Goonotora je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Tagovi
c sharp, problem kod

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
ASUS stvara monstruma, Dual-GTX 285 4 GB zdravkelja Vesti 17 17.6.2009 20:56


Sva vremena su po Griniču +2 h. Sada je 3:03.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com