c# - Only fire the event on the correct User Control -
i have following scenario, have tabcontrol
each tabpage
represents year. on every year-tabpage
have tabcontrol
12 tabpages
months. on every month-tabpage
have usercontrol
. this:
foreach (tabpage tp2 in tbmonat.tabpages) { ucmonat monat = new ucmonat(convert.toint32(tp.name), convert.toint32(tp2.name)); monat.parent = this; onseturlaub += monat.getselectedcells; monat.dock = dockstyle.fill; tp2.controls.add(monat); }
on mainform have button
, if button
pressed event
fired on usercontrol
. @ moment event fired on every usercontrol
. want fired on active usercontrol
. how can that?
mainform:
public delegate void seturlaub(string date, eventargs e); public event seturlaub onseturlaub; public void cmdurlaub_click(object sender, eventargs e) { if (onseturlaub != null) onseturlaub(jahr + monat , e); }
usercontrol:
public void getselectedcells(string sender, eventargs e) { int year = convert.toint32(sender.substring(0, 4)); int month = convert.toint32(sender.substring(4)); int numcells = this.dgvurlaub.selectedcells.count; }
event handlers aren't selective in way. every subscriber receive event when raised , of usercontrols subscribe same event.
you can either filter when receive event
if (this.focused) { //do stuff active control should }
or can unsubscribe , subscribe focus changes, subscribing user controls enter
, leave
events
monat.enter += (s, e) => onseturlaub += ((ucmonat)s).getselectedcells; monat.leave += (s, e) => onseturlaub -= ((ucmonat)s).getselectedcells;
so active ucmonat
gets event.
Comments
Post a Comment