Avatar billede palle_pirat Nybegynder
23. august 2008 - 16:07 Der er 14 kommentarer og
1 løsning

return uden for if sætning

Hej

Jeg er igan med at lave et kortspil. Mit problem er når jeg har kørt et kort igennem if sætningen så kommer de nye oplysninger ikke uden for min if sætning.

            if (kloever1.Checked)
            {
                kortEtKuloer = kortEt + "kloever";
            }

Det er kortEtKuloer som jeg gerne vil kunne bruge uden for if sætningen med de nye oplysninger. Er der info nok og er der nogen som kan hjælpe?

På forhånd tak
Avatar billede keysersoze Guru
23. august 2008 - 16:21 #1
som du har stillet det op dér må du have oprettet variablen kortEtKuloer uden for din if-sætning og derfor vil den altid findes i den pågældende metode - altså vil du kunne bruge kortEtKuloer uden for if.
Avatar billede palle_pirat Nybegynder
23. august 2008 - 16:25 #2
Den er oprettet uden for, og jeg kan godt bruge den, men jeg får ikke de nye oplysninger med som kommer i if sætningen.
Avatar billede keysersoze Guru
23. august 2008 - 17:06 #3
så kunne noget tyde på at du ikke kommer ind i if-sætningen. Hvad sker der med variablen undervejs når du debugger?
Avatar billede palle_pirat Nybegynder
23. august 2008 - 17:11 #4
Variablen bliver fyldt på, som den skal, og når den er færdig i if sætningen stopper den. Variablen ser ud som den skal i if sætningen, men ikke i resten af programmet.
Avatar billede keysersoze Guru
23. august 2008 - 17:19 #5
hvis variablen ændrer sig inde i if-sætningen er der noget der ændrer den tilbage igen - det burde du let kunne se hvis du kører debug helt igennem. Ellers kom med noget mere kode.
Avatar billede palle_pirat Nybegynder
23. august 2008 - 17:36 #6
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void controlKnap_Click(object sender, EventArgs e)
        {
            string kortEtKuloer;

            if (kloever1.Checked)
            {
                kortEtKuloer = kort1.Text + "kuloer";
            }

            MessageBox.Show(kortEtKuloer.ToString());
           
        }

    }
Er det kode nok?

MessageBox.Show er bare for at teste den.
Avatar billede palle_pirat Nybegynder
23. august 2008 - 17:38 #7
Hvis jeg flytter MessageBox.Show ind i if sætningen så virker det som det skal. Men jeg skal bruge de oplysninger som kommer i if sætningen andre steder i applikationen.
Avatar billede keysersoze Guru
23. august 2008 - 18:10 #8
der er ingen måde hvorpå at kortEtKuloer kan miste sin værdi - så kommer du ind i if-sætningen vil din messagebox også vise den værdi der sættes. Men skal du bruge værdien andre steder i applikationen er du nødt til at initialisere din variabel et andet sted, fx før public Form1(), eller på anden måde gemme den. variabler "virker" jo kun i det scope de sættes i - i dette tilfælde i controlKnap_Click.
Avatar billede palle_pirat Nybegynder
23. august 2008 - 18:52 #9
Det er jeg med på, men findes der ikke en måde, hvor jeg kan trække det med ud fra if sætningen.
Avatar billede keysersoze Guru
23. august 2008 - 19:08 #10
ikke forstået?
Avatar billede palle_pirat Nybegynder
23. august 2008 - 20:53 #11
Hvis jeg skrev konge i [kort1.text] og markerede [kloever] så ville [kortEtKuloer]-variablen indeholde (kongekloever) efter den har været igennem if sætningen. Hvis jeg så skulle køre [kortEtKuloer] i en anden if sætning ville den ikke indeholde (kongekloever). Jeg vil gerne kunne køre den i flere "scopes". Men hvis det ikke kan lade sig gøre at trække den ud af if sætningen, må du gerne hjælpe mig med at lave en public static string (eller hvad der skal til). Jeg er ikke med på hvordan det foregår i en win applikation.
Avatar billede keysersoze Guru
24. august 2008 - 17:34 #12
Lav fx en static klasse med den/de nødvendige properties - se fx http://www.daniweb.com/forums/thread49952.html
Avatar billede md_craig Nybegynder
25. august 2008 - 10:32 #13
Øhm... I den kode du poster der, vil dit kort holde sin værdi efter exit af if sætningen som Keysersoze siger.

Ergo giver tingene du siger ikke mening, så der må være noget mere kode, nogle flere metoder osv.

Og vil desuden mene det er en dum ide at hoppe over i at bruge "public static strings"... Du skal gøre dig klar hvordan scope skal være...

Er det en enkelt form du starter op som skal arbejde med det her, så et field (hvis det godt må være grimt) eller vedhæft en controller til din form... skal du have flere forme inden for samme application der skal have fat i samme information, så IMO singleton + fields + properties, Men en static class vil også virke her... skal din information deles mellem flere instanser af samme application bliver ting straks mere kompliceret...

Men zumma zumarium...

    public partial class Form1 : Form
    {
        private static string staticField;
        private string field;

        public Form1()
        {
            InitializeComponent();
        }

        private void controlKnap_Click(object sender, EventArgs e)
        {
            // kortEtKuloer oprettes, og starter sin livscyklus.
            string kortEtKuloer = string.Empty;

            if (kloever1.Checked)
            {
                // en ny værdi assignes til kortEtKuloer.
                kortEtKuloer = kort1.Text + "kuloer";
            }

            MessageBox.Show(kortEtKuloer);
            field = kortEtKuloer;
            staticField = field;
            // kortEtKuloer dør med scope, og makeres for GC.
            // field lever uden for metodens scope, og overlever derfor.         
        }

        private void controlKnap2_Click(object sender, EventArgs e)
        {
            // kortEtKuloer oprettes, og starter sin livscyklus, DETTE ER EN ANDEN kortEtKuloer end i controlKnap_Click.
            string kortEtKuloer = string.Empty;

            // kortEtKuloer er aldrig blevet sat til noge her, og er derfor "" lige meget hvor mange gange controlKnap_Click metoden har kørt'
            // har controlKnap_Click kørt er field derimod noget andet.
            MessageBox.Show("kortEtKuloer: " + kortEtKuloer + " and field: " + field);
            field = kortEtKuloer;
            staticField = field;
            // kortEtKuloer dør med scope, og makeres for GC.
            // field lever uden for metodens scope, og overlever derfor.
            // field er nu tom.
        }

        ~Form1()
        {
            //formens scope dør, og field bliver makeret for GC.
            //staticField overlever dog indtil AppDomainet lukkes, og vil kunne indeholde sin værdi på tværs af instanser.
        }
    }

SÅ... du må mangle noget kode i det scenario hvor det ikke virker for dig.
Avatar billede palle_pirat Nybegynder
31. august 2008 - 23:14 #14
md craig - Nu vil jeg lige prøve det som du har beskrevet, og så får du svar imorgen.
Men jeg har ret meget mere kode at vise, så jeg forstår heller ikke helt hvorfor det ikke fungerer.
Avatar billede palle_pirat Nybegynder
12. oktober 2008 - 15:58 #15
slut
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