Avatar billede noxiaz Nybegynder
31. januar 2007 - 14:15 Der er 5 kommentarer og
1 løsning

Variable mellem 2 filer.

Har 2 filer: start.cs og game.cs

start.cs er main formen som det hele starter i.
game.cs kommer man over i efter man har trykket "start" i start.cs - Den lukker main formen og åbner formen i game.cs

Men der skal være mulighed for at vælge multiplayer og singleplayer. Har så lavet en "public int gamemode = 1;" i start.cs som start på 1, som er singleplayer og skifter til 2 hvis man vælger mulitplayer.

i game.cs har jeg oprettet "public form start;" så jeg har adgang til variabler over i start.cs

Det funger også fint nok på en måde, problemmet er bare at selv om jeg ændre til multiplayer og "int gamemode = 2" så i game.cs returner den stadig 1?
MessageBox.Show("G: " + start.gamemode.ToString());

Lige meget hvad jeg gør, returner den stadig 1.
men hvis jeg så ændre "public int gamemode = 1;" til 2 så returner den 2 - men selv om jeg bagefter sætter gamemode = 1; returner den stadig 2? Hvorfor er det ikke muligt at få det tal som står i gamemode? Men kun det tal som den blev sat med i starten?
Avatar billede Slettet bruger
31. januar 2007 - 15:39 #1
Har ikke den store erfaring med windows forms, men et bud kunne være at lave din variabel statisk.

Altså, public static int gameMode;

Med venlig hilsen,

Thomas Møller Nexø
---------------------------------------------
Discount Domæner
http://www.discountdomains.dk
Registrering af danske og udenlandske domæner
Avatar billede crazysnap Seniormester
31. januar 2007 - 16:00 #2
Hej noxiaz,


Problemet ligger sandsynligvis i at du prøver at tilgå variable som ligger i start formen efter den er lukket (disposed). Hvorfor også have variable som skal tilgåes flere steder fra liggende i en form? Ville det ikke være bedre hvis du flyttede dem ud i sin egen klasse (Specielt hvis klassen implementerer et singleton pattern). Du kan prøve at se eksemplet nedenfor:



static void Main()
{
    Application.Run(new Start());
}

class GlobalVariables
{
        //singleton pattern (constructor is private)
    public static GlobalVariables Instance = new GlobalVariables();

    public int gamemode = 1;

        private GlobalVariables() {}
}

class Start : Form
{
    public Start()
    {
        this.Text = "Start Form";
       
        GlobalVariables.Instance.gamemode = 2;
       
        Game game = new Game();
        game.ShowDialog();
        this.Close();
    }
}

class Game : Form
{
    public Game()
    {
        this.Text = "Game Form";

        Button button = new Button();
        button.Text = "Gamemode";
        button.Click += new EventHandler(button_Click);
        this.Controls.Add(button);
    }

    void button_Click(object sender, EventArgs e)
    {
        MessageBox.Show(GlobalVariables.Instance.gamemode.ToString());
    }
}


Håber du kan se hvad det er jeg prøver at gøre! :) Det burde løse din problemstilling. Alle forme kan tilgå "gamemode" gennem "GlobalVariables.Instance" plus der selvfølgelig bare kan tilføjes flere variabler til "GlobalVariables" klassen end kun "gamemode".


Mvh.

- Snap
Avatar billede hmortensen Nybegynder
31. januar 2007 - 16:32 #3
En lille (ret vigtig) rettelse til din Instance deklarering.
public static readonly GlobalVariables Instance = new GlobalVariables();

Og så laver man normalt singleton klassen sealed.
Avatar billede noxiaz Nybegynder
31. januar 2007 - 16:57 #4
crazysnap ! Kanon ! det virekde sq ;) Send svar ! :D er fandme glad for i kan hjælpe ! ;)
Avatar billede crazysnap Seniormester
31. januar 2007 - 18:21 #5
Det var da dejligt at høre! :) Og glad for jeg kunne hjælpe.

Her har du svaret og på forhånd tak for pointene!


Mvh.

- Snap
Avatar billede crazysnap Seniormester
31. januar 2007 - 18:21 #6
ups, her er det! ;)
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