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

Trigerovanje Click event-a za radioButton

[es] :: .NET :: .NET Desktop razvoj :: Trigerovanje Click event-a za radioButton

[ Pregleda: 1667 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
92.244.132.*



+3 Profil

icon Trigerovanje Click event-a za radioButton21.03.2012. u 10:41 - pre 146 meseci
Evo sto se meni desilo (i oduzelo mi 4 dana), pa rekoh da podijelim sa vama, mozda nekom bude i od koristi, a mozda i interesantno za procitati.

Tema je, naizgled trivijalna: radi se o trigerovanju Click eventa za radioButton.
Za ocekivati je, kako mu i ime kaze, da se ovaj event trigeruje kad kliknete misem na doticni radioButton ili kad je u fokusu, pa pritisnete taster Enter.
E, ono sto ja nisam znao, ovaj event moze da se trigeruje (samo sto to kod Microsoft-a ne pise ili barem ja nisam uspio da pronadjem) i kada ne kliknete misem na radioButton ili
ne pritisnete taster Enter, ako je u fokusu. A jos ako vam se to desi usled razvoja, relativno, slozenije kontrole, moze da bude jako, pa nemam bolji izraz,
iritirajuce i da vam uzme, kao i meni, odredjeno vrijeme.

Imam jednu kontrolu na kojoj su (ilustracije radi): 3 groupBox-a (bilo sa listboksovima, textboxovima, button-ima, sa namjenom za: prikaz podataka, pretrazivanje
podataka, dodavanje novih, mijenjanje, brisanje itd), 2 panela - na jednom je jedan dataGridView za unos, prikaz i modify podataka, a na drugom panelu (on sada vazan :) ):
jedan dataGridView (za unos, prikaz, modify, itd) plus 4 groupBox-a sa po dva radioButton-a svaki (za izbor nekih opcija) i plus jos neke textBox-ove.
Napominjem da se UI oba panela realizovani kao posebne kontrole, to jest, kao dvije razlicite klase.

I evo sto se dogadja u praksi: razvijao sam funkcionalnost 'Modify' za dataGridView u jednom panelu. Prilikom testiranja, kad se inicira operacija 'Modify' u gridu na prvom panelu,
a to se radi (trenutno) klikom na neko dugme, program odradi 'Update' u bazi podataka i plus 'IZNENADJENJE': trigeruje i Click event od jednog radiobutton-a sa drugog panela
(u kome se takodje odradi 'Update' u bazi podataka).

Na kontroli ovakve slozenosti moze svasta da vam padne na pamet, samo vjerovatno ne, kao sto nije ni meni, da se Click event moze trigerovati i bez klika misem (ili
preko tastature).

Uvidom u 'stack trace' moze da se vidi razlika u slucaju da je Click trigerovan bas klikom misa i da Click nije trigerovan klikom misa.

StackTrace za slucaj da je Click trigerovan klikom misa:
OnClick - OnMouseUp - WinMouseUp - WndProc - OnMessage itd

StackTrace za skucaj da Click nije trigerovan klikom misa:
OnClick - OnEnter - NotifyEnter - UpdateFocusedControl - AssignActiveControlInternal - ActivateControlInternal - SetActiveControlInternal.

Poslije razmisljanja i google-ovanja, razumio sam sta se desilo:

- pregledao sam sve kontrole sa ukljucenom opcijom 'TabOrder' (to je vazno),
- TabOrder panela (sa radioButton-ima) je prvi sledeci u odnosu na TabOrder button-a, kojim se inicira 'Update' podataka sa prvog panela,
- na panelu sa radioButton-ima, prvi TabOrder je bas onog radioButton-a, ciji se Click trigeruje,
- zbog logike aplikacije, ja po zavrsetku 'Update'-a na prvom panelu, uradim disable button-a: recimo, buttonUpdate.Enable = false,
- u tom trenutku se kontrola (fokus) prebacuje na prvu sledecu (prema TabOrder-u) kontrolu, a to je ovaj drugi panel, a u njemu je, opet, prva kontrola, na koju se
setuje fokus, radioButton, i
- ono sto nisam znao, Click event se trigeruje i tada, bez ikakvog klika na sam radioButton, dakle: dovoljno je da se radioButton nadje u fokusu.

Stvar sam rijesio tako sto sam 'ispremjestao' TabOrder kontrola na doticnom panelu, tako da neka druga kontrola dobija fokus, kada ga dobije sam panel.

Interesuje me vase misljenje, da li je ovo 'bug' u Visual Studio-u: trigerovanje Click event-a, a bez klika misem ?
Da li je jos neko imao slicnih iskustava?
Programming is fun, but writing good software is hard ...
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: Trigerovanje Click event-a za radioButton21.03.2012. u 11:27 - pre 146 meseci
Jer ti je taj radio button pre tog stanja bio cekiran ili bilo koji drugi u njegovoj grupi na panelu ?

Mozda sam frejmvork automatski cekira radio button jer neka od opcija mora da bude setovana , tako da se prvi radio button sam cekira ako ti to nisi kroz kod uradio , pa se i event sam okine.
U sustini na formi se ne dozvoljava nedefinisano stanje radio-button-a tj, da nijedan nije cekiran.

Viva lollapalooza
 
Odgovor na temu

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
92.244.132.*



+3 Profil

icon Re: Trigerovanje Click event-a za radioButton21.03.2012. u 11:40 - pre 146 meseci
> U sustini na formi se ne dozvoljava nedefinisano stanje radio-button-a.

Stanja radioButton-a se ucitavaju iz baze, iz polja tipa 'bit': znaci stanja nisu nedefinisana (u prevodu ne mogu biti, u jednom groupBox-u, oba radioButton-a nedefinisana).

> Jer ti je taj radio button pre tog stanja bio cekiran ili bilo koji drugi u njegovoj grupi na panelu ?

Odgovor je u gornjoj recenici: uvijek je jedan radioButton (u okviru jednog groupBox-a) cekiran. TACNO: uvijek se trigerovao Click event onog radioButton-a, koji je bio cekiran.

Kao sto sam napisao, moja dilema se odnosi na to: da li je cinjenica da se nesto, sto se zove Click event i za sto pise da se trigeruje 'tako i tako', moze biti trigerovano i na drugi nacin, a da to nije dokumentaovano. Upravo sam naisao na: http://social.msdn.microsoft.c...b-1f63-42e1-a200-19b261b63794/. To je problem koji sam ja imao ...
Programming is fun, but writing good software is hard ...
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: Trigerovanje Click event-a za radioButton21.03.2012. u 11:46 - pre 146 meseci
Izgleda da si u pravu.
Sad sam napravio panel i u njemu 2 radio buttona .
Setovao sam u dizajneru stanje prvog na checked i event se okida bas na tom prvom bez obzira da li je neko stanje definisano ili ne .
Promenim tab-order da onaj drugi bude prvi i njegov hendler se okine .


Viva lollapalooza
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: Trigerovanje Click event-a za radioButton21.03.2012. u 11:53 - pre 146 meseci
Eh dao ti je odgovor Vladimir na onom linku .Stavi TabStop = False na tom radio buttonu i nece trigerovati event .
Sada sam probao i radi ali neces imati tab opciju za te kontrole .

Viva lollapalooza
 
Odgovor na temu

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
92.244.132.*



+3 Profil

icon Re: Trigerovanje Click event-a za radioButton21.03.2012. u 12:05 - pre 146 meseci
Procitao sam ...

Hvala ti na vremenu i trudu ... kao sto rekoh, rijesio sam tako sto sam promijenio TabOrder kontrola na samom panelu, tako da nijedan radioButton nije u fokusu, kad taj panel bude u fokusu ... sto mu, skoro, dodje na isto kao i 'preskakanje' kontrole sa TabStop=false :)

Jednostavno, moja poenta je da sam zbog ovoga izgubio 4 dana (od cega se DVA odnose na proslu subotu i nedjelju - zali boze divnog vremena, koje sam proveo piljeci u racunar :( ), a smatram da zbog ovoga nisam trebao izgubiti niti jedan MINUT, a kamoli sta drugo ... da se malo pravim 'pametan': ako je istorija razvoja programiranja = istorija razvoja apstrakcije, poslednje sto bi mi palo na pamet jeste da da razmisljam da mi redosled kontrola na nekoj formi moze ovako zagorcati jedan divan, suncani, vikend :)
Programming is fun, but writing good software is hard ...
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Trigerovanje Click event-a za radioButton

[ Pregleda: 1667 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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