Avatar billede clausb Nybegynder
11. februar 2008 - 08:17 Der er 4 kommentarer og
1 løsning

Fælles variable

Hej.
Jeg er ny i C# og har dette (simple?) spørgsmål :
Jeg har brug for nogle 'globale' variable, således at variable ændret fra Form1 kan 'ses' fra Form2. (når Form2 loades HAR Form1 ændret dem ..de behøves altså ikke kunne 'snakke sammen')

Claus
Avatar billede wisen Nybegynder
11. februar 2008 - 08:32 #1
en måde at gøre det på at at lave en abstrakt klasse med statiske variable

public abstract class Globals
{
  public static string GlobalVariable;
}

... men pas på hvis du bruger tråde... ovenstående er ikke trådsikkert!

/Wisen
Avatar billede sandrasmurf Nybegynder
11. februar 2008 - 09:04 #2
Hvis form1 åbner form2 (eksempelvis gennem et tryk på en knap), så kunne du jo initialisere dine variable i form1 og så sende dine variable med ind, når de kalder form2's constructor. Du skal altså ændre form2's constructor til

public Form2(int globalVar1, int globalVar2) { }

og når du åbner form2 fra form1 kalder du,
new Form2(4, 10).

Så ryger de med ind. Vær opmærksom på at du ikke ved denne metode kan have begge vinduer åbne samtidigt, hvis du vil ændre i dine variable fra form1. Form2 vil kun vide hvad variablene var da du åbnede form2 fra form1.
Avatar billede sandrasmurf Nybegynder
11. februar 2008 - 09:07 #3
Jeg bruger gerne Singleton pattern til Globale Variable -> Du kan se et eksempel her.

public sealed class GlobaleVariables
    {
        #region The global variables

        bool wasSaved = false;
        int formSize = 720;
        int numClicks = 0;

        #endregion

        #region Properties

        public bool WasSaved
        {
            get { return wasSaved; }
            set { wasSaved = value; }
        }

        public int FormSize
        {
            get { return formSize; }
            set { formSize = value; }
        }

        public int NumClicks
        {
            get { return numClicks; }
            set { numClicks = value; }
        }

        #endregion

        #region Singleton pattern

        static readonly GlobaleVariables instance = new GlobaleVariables();

        /// <summary>
        /// Explicit static constructor to tell C# compiler
        /// not to mark type as beforefieldinit
        /// </summary>
        static GlobaleVariables()
        {
        }

        GlobaleVariables()
        {
        }

        public static GlobaleVariables Instance
        {
            get { return instance; }
        }

        #endregion
    }

Du kan kalde klassen fra alle andre klasser uden at skulle sende referencer med ind i constructorer etc.

Du bruger den ved at skrive
GlobaleVariables.Instance.NumClicks = 4;
Avatar billede clausb Nybegynder
12. februar 2008 - 07:45 #4
Hej Sandrasmurf ! - det virker bare 100% :-) takker ... drop et svar og der kommer points ! Du har vel ikke noget der lige så 'smooth' til manupulering af access-databaser ? :-)  læse/skrive osv .. OGSÅ bare helt simpelt .......
mvh.
Claus
Avatar billede sandrasmurf Nybegynder
12. februar 2008 - 23:01 #5
Glad for at kunne hjælpe.

Manipulering af databaser kan være så meget.

Hvis du vil lege med Access DB skal du nok kigge lidt på, at oprette et dataset og tilknytte Bindingsources of TableAdapters. Man kan klikke sig til det hele gennem Visual Studio. Prøv evt at smide et DataGridview på din form og se hvad der sker når man beder den om at være DataBound.

Hvis du vil snakke med Access med SQL kommandoer, så skal du nok kigge på OleDBAdapter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester