Avatar billede nubii Nybegynder
27. oktober 2008 - 14:08 Der er 18 kommentarer

Strings imellem forms?

Meget simpelt spørgsmål, men ska bruge hurtigt så tilbyder pæn sum points. :)

Hvordan kan man sende strings fra den ene form til den anden? f.eks. jeg har en loginform, og jeg vil gerne ha den til og skrive brugernavnet på en anden form når man er logget ind? sku være super enkelt, kan bar ikke lige regne det ud..

200pts, til en rigtig god og SIMPEL forklaring!
Avatar billede arne_v Ekspert
27. oktober 2008 - 14:11 #1
Login form skal have en reference til den anden form - saa kan den saette en property.

Men hele tricket er at sikre at den har den reference. Hvis den anden form
aabner login formenen kan den sende this med over i login formens constructor - der
saa gemmer en ref til den.
Avatar billede kalp Novice
27. oktober 2008 - 14:19 #2
uden og have kigget i koden, så mener jeg nok det er hvad jeg har lavet et eksempel på her.. hvordan 2 forms kommunikere med hinanden.
www.kalp.dk/ToForms.zip

det er i øvrigt hvad arne_v også skriver.
Avatar billede bitmatic Nybegynder
27. oktober 2008 - 14:20 #3
Hvis de to forms kører i hver sin tråd er det nødvendigt med en Invoke for at få det til at spille. Du kan evt. spørge på InvokeRequired() i din property, for at checke det.
Under alle omstændigheder skal du nok finde ud af det, for frameworket kaster en exception hvis du prøver at gøre det uden Invoke...
Avatar billede nubii Nybegynder
27. oktober 2008 - 14:33 #4
Kan sku ik få det til og virke det du skriver kalp. Den finder ikke den label jeg laver på form2.

Ved sku ik lige hvad det kan være.. syntes det virker meget underligt..
Avatar billede kalp Novice
27. oktober 2008 - 15:25 #5
Din label skal være erklæret public:)
den er nok private som udgangspunkt og så kan du ikke se den..

og ellers skal du blot lave en property eller metode til at hive fat i den.
Avatar billede kalp Novice
27. oktober 2008 - 15:29 #6
nu har jeg hentet min kode ned og kørt den.
og den første form retter da teksten i en laben på form 2:)

hvis du trykker på knappen i den første form og efterfølgende taster noget ind i text boksen så vil du se:)
Avatar billede arne_v Ekspert
27. oktober 2008 - 15:30 #7
Det er paenest at rette gennem en property.
Avatar billede kalp Novice
27. oktober 2008 - 15:41 #8
Det er i hvertfald det rigtige i c#
Avatar billede nubii Nybegynder
27. oktober 2008 - 21:00 #9
Nogen der kan linke eller forklare en property ? hvordan man laver og bruger?
Avatar billede arne_v Ekspert
27. oktober 2008 - 21:03 #10
Avatar billede nubii Nybegynder
28. oktober 2008 - 10:17 #11
Har fattet det med classes som der står i det link. Men hvordan "kalder" jeg mine strings og data på en anden form? :s
står der ikke rigtigt noget om på msdn's side..
Avatar billede nubii Nybegynder
28. oktober 2008 - 11:44 #12
Har indtil nu:

// form1

    public partial class Form1 : Form
    {
        public string navn = "hej";
        public string lol
        {
            get { return navn; }
            set { navn = value; }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.label1.Text = lol;
        }
    }
Avatar billede nubii Nybegynder
28. oktober 2008 - 11:45 #13
men virker ikke. :s

Hvad mangler jeg?
Avatar billede kalp Novice
28. oktober 2008 - 11:57 #14
Jeg udpeger de forkerte områder for dig og så må du tænke dig om en ekstra gang:)
Du har i øvrigt kildekoden fra tidligere (måske forstår du den nu efter og have indhentet ny viden fra arne_v's link.

FORKERT!
public string navn = "hej";
Hint: Bør være måske være private når du netop har lavet properties;)

FORKERT!
Form2 form = new Form2();
Hint: Bør nok medtage en reference til din form i konstruktøren, dvs. det skal din Form2 så understøtte at kunne modtage.

FORKERT!
form.label1.Text = lol;
Hint: du burde have fået et hint fra din kompiller. Du mangler lige nogle " " rundt om lol.
Avatar billede nubii Nybegynder
28. oktober 2008 - 12:12 #15
// FORKERT!
form.label1.Text = lol;
Hint: du burde have fået et hint fra din kompiller. Du mangler lige nogle " " rundt om lol.
//
Da ikk når når lol er min string der er declared øverst oppe?

Kan du forklare det med referencen til form'en ? er ikke sikker på jeg forstår.
Avatar billede kalp Novice
28. oktober 2008 - 13:02 #16
Form2 form = new Form2();

skal være

Form2 form = new Form2(this);

og du vil så få en kompiller fejl..

for at rette den skal du ind og oprette en konstruktør i Form2 som tager imod en Form reference.
Avatar billede bitmatic Nybegynder
28. oktober 2008 - 16:14 #17
Prøv med:


// form1

    public partial class Form1 : Form
    {
        private string navn = "hej";
        private Form2 form2 = new Form2();
       
        public string lol
        {
            get { return navn; }
            set { navn = value; }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            form2.label1.Text = lol;
        }
    }


Men så risikerer du altså at ende i Invoke problemer...
Avatar billede bitmatic Nybegynder
28. oktober 2008 - 16:24 #18
meh.. Har lige testet det. Det spiller bare, så det burde ikke give Invoke problemer hos dig.
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