Ik ben bezig met een MDI applicatie en wil dat ieder child form maar een keer getoond mag worden. Om dit voor elkaar te krijgen verander ik de constructor van public naar private en voeg ik de volgende code toe aan het form:
Dit werkt goed en voldoet prima aan de eisen die ik heb. Omdat deze code in elk child form moet komen leek het me een mooie candidaat voor inheritance. Ik heb een nieuw form aangemaakt, MdiChildBase, en heb de code voor mijn singleton hier in geplaatst (en natuurlijk MdiChild overal vervangen door MdiChildBase). Vervolgens heb ik MdiChild niet laten overerven van Form maar van MdiChildBase.
Helaas ging het hier mis. Omdat MdiChildBase een instance aanmaakt van MdiChildBase en dus niet van MdiChild en deze twee niet naar elkaar geconverteerd kunnen worden. Ik heb gezocht maar kan nergens iets vinden wat een oplossing zou kunnen zijn.
Is er een manier om de code in MdiChildBase zo te schrijven dat deze een instance terug geeft van het form dat MdiChildBase inherit?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| private static readonly object padlock = new object(); private static MdiChild _instance = null; public static MdiChild GetInstance { get { lock (padlock) { if (_instance == null) { _instance = new MdiChild(); _instance.FormClosed += delegate { _instance = null; }; } } return _instance; } } |
Dit werkt goed en voldoet prima aan de eisen die ik heb. Omdat deze code in elk child form moet komen leek het me een mooie candidaat voor inheritance. Ik heb een nieuw form aangemaakt, MdiChildBase, en heb de code voor mijn singleton hier in geplaatst (en natuurlijk MdiChild overal vervangen door MdiChildBase). Vervolgens heb ik MdiChild niet laten overerven van Form maar van MdiChildBase.
Helaas ging het hier mis. Omdat MdiChildBase een instance aanmaakt van MdiChildBase en dus niet van MdiChild en deze twee niet naar elkaar geconverteerd kunnen worden. Ik heb gezocht maar kan nergens iets vinden wat een oplossing zou kunnen zijn.
Is er een manier om de code in MdiChildBase zo te schrijven dat deze een instance terug geeft van het form dat MdiChildBase inherit?