Toon posts:

[C#] Globale variabelen, ala Session

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste proggerts,

Ik ben met een winforms appje bezig, en nu loop ik tegen het probleem aan dat ik globale variabelen nodig heb ala asp/webforms (session()).
is er een manier om dit te doen in c# winforms?
M.a.w. ik wil ergens in de code variabelen declareren, en deze in alle child geopende forms kunnen lezen EN schrijven.
Ik doe het nu dmv properties aanmaken in een form, en deze zet ik met de juiste waardes.
Is dit een beetje netjes, of is er een makkelijker manier?
Iemand een idee?

[ Voor 19% gewijzigd door Verwijderd op 22-01-2007 19:38 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Als jij een class met die variabelen in de main{} functie van je applicatie declareerd, kun je die mooi meegeven met die forms :)

Edit: of een singleton gaan implementeren

[ Voor 29% gewijzigd door mulder op 22-01-2007 19:39 ]

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Kun je hier eens een kort voorbeeld voor geven? Zolang ik die class vars kan lezen EN schrijven dan is dit wel interesant.

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Een form is gewoon een class, als je daar een extra constructor aan toevoegd kan je variabelen gewoon meegeven.

March of the Eagles


Verwijderd

Een static class Globals waar je al je globale variabelen in definieert?

  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Application Settings of gewoon System.Web importeren en Session gebruiken ?

Edit: Er zijn veel wegen naar Rome in dit geval, het is maar wat je wil/zoekt ;)

[ Voor 22% gewijzigd door SKiLLa op 27-01-2007 19:20 ]

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Gewoon een ApplicationState class definieren (bij voorkeur als Singleton, zoals al eerder opgemerkt), die intern een Hashtable gebruikt om key/value combinaties op te slaan.

Als je quick and dirty wil werken, dan geef je deze class alleen een indexer property om aan de hand van strings je waarden op te slaan en terug te lezen, als je het netter wilt doen kan je op deze class ook andere properties definieren die onder water gebruik maken van de Hashtable.

Bijv.:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ApplicationData{

   private static ApplicationData _instance = null;

   public static ApplicationData Instance
   {
      get
      {  if(_instance == null)
            _instance = new ApplicationData();
         return _instance;
      }
   }

   private ApplicationData(){}

   private Hashtable _appData;

   public string lastUsedUrl
   {
      get{  return (string)_appData["lastUsedUrl"];  }
      set{  _appData["lastUsedUrl"] = value;  }
   }
}

Verwijderd

SKiLLa schreef op zaterdag 27 januari 2007 @ 19:17:
Application Settings of gewoon System.Web importeren en Session gebruiken ?

Edit: Er zijn veel wegen naar Rome in dit geval, het is maar wat je wil/zoekt ;)
Dat gaat dus niet werken, want bij Windows applicaties is er geen session handler...

MrBucket 's oplossing biedt een juiste oplossing. Je zou ook nog een this property kunnen implementeren. Dat is iets korter en mooier, maar eigenlijk gewoon exact hetzelfde.

[ Voor 17% gewijzigd door Verwijderd op 27-01-2007 21:45 ]


Verwijderd

Topicstarter
Dank voor alle reacties.
Ik ga aan de gang met de mrbucket oplossing.
Enig idee waar ik die class dan moet initializen om hem voor de rest van het programma globaal te maken? waarschijnlijk voordat ik mijn eerste FrmMain aanroep?

Verwijderd

Verwijderd schreef op zondag 28 januari 2007 @ 11:23:
Dank voor alle reacties.
Ik ga aan de gang met de mrbucket oplossing.
Enig idee waar ik die class dan moet initializen om hem voor de rest van het programma globaal te maken? waarschijnlijk voordat ik mijn eerste FrmMain aanroep?
Dat hoeft niet. Het mooie van static classes is dat ze eenmalig geinstantieerd worden en daarna nooit meer, maar wel gewoon benaderbaar blijven ;). Zet voor de grap maar een paar breakpoints in de code. Dan merk je hetzelf het snelste en is het meteen een stuk duidelijker.
Pagina: 1