Ik heb een form waarop een ListView control staat. De bedoeling van deze is een log weer te geven over wat er gebeurt met de applicatie (de keuze voor een ListView is omdat ik per regel een icoontje wil weergeven, maar dat doet nu niet terzake).
De applicatie bestaat uit meerdere forms en classes. Nu zouden al die classes en forms toegang moeten hebben tot die log ListView control. Al deze classes en forms worden vanuit de form waarin de ListView control staat aangeroepen (laten we deze form even HoofdForm noemen). Bijvoorbeeld:
Voor een dialog form zou je iets als volgt kunnen schrijven in HoofdForm:
Hoe kan ik in dit geval ervoor zorgen dat zaken in de tweede form vermeld kunnen worden in de log op HoofdForm? En liefst op het moment dat ze optreden (bij het ShowDialog() voorbeeld zou er pas naar de log geschreven worden als het dialoogvenster gesloten wordt - ongeacht wanneer de foutmelding optrad). Hetzelfde geldt voor classes die ik aanroep.
Een ideetje zou overerving zijn. De forms zouden dan overerven van HoofdForm, maar dat wil ik helemaal niet. Het zijn stuk voor stuk onafhankelijke forms die afgezien van de log en een paar variabelen niets van elkaar moeten hebben.
Ik had thans wel iets gevonden dat werkt, maar het is een vrij vuile oplossing: De ListView als public static declareren. Dan is deze vanuit alle classes en forms bereikbaar als HoofdForm.listViewLog. Maar hierdoor verdwijnt de ListView uit de designer (omdat this dan vervangen wordt door HoofdForm en de Windows Form Designer dit dan niet meer laat zien). Dat is nu desnoods wel iets waar ik nog mee kan leven, maar het lijkt me helemaal niet correct geprogrammeerd (allez, het werkt wel, maar het is niet netjes).
Dus, kan iemand me uitleggen hoe ik dit wel goed aanpak?
De applicatie bestaat uit meerdere forms en classes. Nu zouden al die classes en forms toegang moeten hebben tot die log ListView control. Al deze classes en forms worden vanuit de form waarin de ListView control staat aangeroepen (laten we deze form even HoofdForm noemen). Bijvoorbeeld:
code:
Nu is het de bedoeling dat al deze classes en forms gebruik kunnen maken van de log ListView.1
| Class2 class2 = new Class2(); |
Voor een dialog form zou je iets als volgt kunnen schrijven in HoofdForm:
code:
Waarbij de functie AddToLog() natuurlijk de foutmelding naar de log ListView schrijft. Maar dat werkt enkel bij ShowDialog()... Als je gewoon Show() gebruikt dan krijg je een tweede form terwijl HoofdForm nog steeds bruikbaar blijft. Er wordt dus niet gewacht met verwerking tot venster df gesloten wordt.1
2
3
4
| DialogForm df = new DialogForm;
df.ShowDialog();
if (df.Error)
AddToLog(df.ErrorMessage) |
Hoe kan ik in dit geval ervoor zorgen dat zaken in de tweede form vermeld kunnen worden in de log op HoofdForm? En liefst op het moment dat ze optreden (bij het ShowDialog() voorbeeld zou er pas naar de log geschreven worden als het dialoogvenster gesloten wordt - ongeacht wanneer de foutmelding optrad). Hetzelfde geldt voor classes die ik aanroep.
Een ideetje zou overerving zijn. De forms zouden dan overerven van HoofdForm, maar dat wil ik helemaal niet. Het zijn stuk voor stuk onafhankelijke forms die afgezien van de log en een paar variabelen niets van elkaar moeten hebben.
Ik had thans wel iets gevonden dat werkt, maar het is een vrij vuile oplossing: De ListView als public static declareren. Dan is deze vanuit alle classes en forms bereikbaar als HoofdForm.listViewLog. Maar hierdoor verdwijnt de ListView uit de designer (omdat this dan vervangen wordt door HoofdForm en de Windows Form Designer dit dan niet meer laat zien). Dat is nu desnoods wel iets waar ik nog mee kan leven, maar het lijkt me helemaal niet correct geprogrammeerd (allez, het werkt wel, maar het is niet netjes).
Dus, kan iemand me uitleggen hoe ik dit wel goed aanpak?