Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#] Events registreren

Pagina: 1
Acties:

  • Piels
  • Registratie: Maart 2001
  • Laatst online: 14-11 13:58
Ik zit met een probleem en ik kan me niet voorstellen dat er geen Best Practice of Design Pattern voor is..

Ik heb een form genaamd MainForm.
Dit form bevat menubalk en een panel waarin ik een UserControl kan laden.

Op het moment dat ik op een bepaalde knop klik in de menubalk, heb ik een klasse die voor mij een instantie aanmaakt van het UserControl, het panel in het MainForm leegt en de instantie van het UserControl op het panel plaatst. Dit gaat allemaal goed.

Nu kom ik echter in de problemen in de volgende situatie.

Als ik op het MainForm een button heb, die een actie moet uitvoeren op het geladen UserControl. b.v. Ik heb een save button op de menubalk en deze moet iets saven op het UserControl.

Ik zit te stoeien met een mooie manier voor het registreren van deze button events omdat het UserControl dat in het MainForm wordt geladen geen weet heeft van het MainForm. Het liefst zou ik de Controller die tussen het MainForm en de UserControl de registratie laten afhandelen, maar ik zie zo niet voor me hoe ik dat netjes kan doen....

Windows Phone Apps: Belstatus, Pinautomaten


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
hoe is je architectuur?
Erft je user control van een basis classe? of Hebben de usercontrols een gezamelijke interface?

Wat heb je zelf al geprobeerd?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Piels
  • Registratie: Maart 2001
  • Laatst online: 14-11 13:58
Wat wil je nog meer weten over de architectuur?


Nee, mijn UserControls hebben geen basis klasse of gezamelijke interface. Het zijn gewoon de standaard UserControls.

Ik heb op Google rond gekeken, maar weet niet goed hoe ik het probleem moet omschrijven om de jusite zoek resultaten te krijgen..

Windows Phone Apps: Belstatus, Pinautomaten


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 13:45

TeeDee

CQB 241

Kan je misschien uit een topic van mij tips halen?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 15-11 23:08

BoAC

Memento mori

Maak een object wat wel weet heeft van beide, en maak in je MainForm een interface waar de events op binnen komen :)

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Piels schreef op vrijdag 26 september 2008 @ 08:33:
Wat wil je nog meer weten over de architectuur?


Nee, mijn UserControls hebben geen basis klasse of gezamelijke interface. Het zijn gewoon de standaard UserControls.

Ik heb op Google rond gekeken, maar weet niet goed hoe ik het probleem moet omschrijven om de jusite zoek resultaten te krijgen..
Je zou bijvoorbeeld alle usercontrols een zelfde interafce kunnen laten erven die een event ButtonClick oid definieerd. Nu kun je op je form generiek op de plaats waar je user control gedefinieerd staat je event handler kunnen registeren.

C#:
1
2
3
4
5
IMyUserControl uc;

//laad usercontrol

uc.Click += new EventHandler(myMethod);


Verder staan in het topic van TeeDee idd veel nuttige dingen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Piels
  • Registratie: Maart 2001
  • Laatst online: 14-11 13:58
TeeDee schreef op vrijdag 26 september 2008 @ 08:38:
Kan je misschien uit een topic van mij tips halen?
Tnx. Zal vanavond eens kijken.
BoAC schreef op vrijdag 26 september 2008 @ 08:41:
Maak een object wat wel weet heeft van beide, en maak in je MainForm een interface waar de events op binnen komen :)
Het is net de andere kant op. Ik trigger een event op het MainForm en wil deze afhandelen in een UserControl.
Ik heb dus een Controller die tussen het MainForm en het UserControl hangt.
4of9 schreef op vrijdag 26 september 2008 @ 08:43:
[...]

Je zou bijvoorbeeld alle usercontrols een zelfde interafce kunnen laten erven die een event ButtonClick oid definieerd. Nu kun je op je form generiek op de plaats waar je user control gedefinieerd staat je event handler kunnen registeren.

C#:
1
2
3
4
5
IMyUserControl uc;

//laad usercontrol

uc.Click += new EventHandler(myMethod);


Verder staan in het topic van TeeDee idd veel nuttige dingen.
Ik snap niet goed wat je bedoeld.
Mijn MainForm heeft mijn UserControl behalve op het panel niet vast. Dit loopt allemaal via die Controller die er tussen hangt.

Eigenlijk wil ik zoiets als ik op een button klik op een bepaald UserControl in te laden, de buttons horende bij het UserControl registreren via de Controller..

Windows Phone Apps: Belstatus, Pinautomaten


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
...

[ Voor 97% gewijzigd door 4of9 op 26-09-2008 08:58 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je zou eens naar het 'Smart Client Software Factory' gebaseerd op CAB (Composite UI Application Block). SCSF en CAb zijn Microsoft practices (voorheen ook bekend als application blocks) en deze stellen jouw in staat programma's te ontwikkelen welke geen weet hebben van elkaar.

De SCSF heeft een centrale EventBroker en elk WorkItem is daar al aan gekoppeld. Dat maakt dat elk WorkItem een event kan afvuren (events worden op een URI achtige manier geregisteerd zoals 'event://ShellApplication/Menu/File/Exit_Close'. Elk workitem kan zich vervolgens op dat uri event registeren'

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Module 1:
[EventPublication(CommandNames.PerformCustomSearch, PublicationScope.Global)]
public event EventHandler PerformSearch;

private void SearchButton_Click(object sender, EventArgs e)
{
    PrepareRequest();
    if (this.PerformSearch != null)
        this.PerformSearch(this, EventArgs.Empty);
}

//Module 2:
[EventSubscription(CommandNames.PerformCustomSearch, ThreadOption.UserInterface)]
public void PerformSearch(object sender, EventArgs e)
{
    IncassoSearchRequestEntity searchRequest = searchStrategy.GetSearchRequest();
    List<IncassoSearchResponseEntity> searchResponse = PerformDatabaseSearch(searchRequest);

    searchView.ResponseList.ShowResults(searchResponse);
}

In dit geval wordt gereageert op een search button click.

In veel SCSF code zul je ook iets van het MVC / MVP (Controller vs Presenter) design pattern herkennen. Het is gebruikelijk om in SCSF projecten event uri's via constanten te benoemen. Daarmee heb je enerzijds autocompletion, maar je verkleint ook de kans op tikfouten.

Heel erg veel documentatie en de download zelf is te vinden op http://www.codeplex.com/smartclient.

If it isn't broken, fix it until it is..

Pagina: 1