Avatar billede koppelgaard Praktikant
11. september 2007 - 13:29 Der er 14 kommentarer og
1 løsning

Få adgang til en forms metoder fra en anden form

Jeg har en comport i en form og metoder til at aflæse den.
Jeg vil gerne kalde formens metoder fra mainformen men jeg kan ikke "se" formen fra mainformen
Jeg har prøvet med new men den anden form dukker ikke op på listen over muligheder.
Avatar billede sherlock Nybegynder
11. september 2007 - 13:35 #1
Er de 2 forms i samme namespace? Ellers skal du have en "using" statement i din mainform.
Avatar billede koppelgaard Praktikant
11. september 2007 - 13:40 #2
Ja, men
Jeg har lige opdaget at jeg havde overset at formen hed noget andet end jeg forventede.
Kan jeg så ikke lægge subformen med i mainformes conttructor?
Avatar billede sherlock Nybegynder
11. september 2007 - 13:52 #3
Nu blev jeg lidt forvirret..
Det korte svar er: Jo :)
Du kan instantiere klasser, som er i assemblies, der er oprettet referencer til i projektet.
Avatar billede koppelgaard Praktikant
11. september 2007 - 14:06 #4
Ok jeg lyder måske lidt dum, men jeg er ny i C#.
Avatar billede sherlock Nybegynder
11. september 2007 - 14:20 #5
Her er et meget simpelt eksempel på at instantiere en form fra en andens constructor.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace HelloWorldApp
{
    static class HelloWorld
    {

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new HWForm());
        }
    } // HelloWorld

    public class HWForm : Form
    {
            private Label     lblHW;

        public HWForm()
        {

            lblHW        = new System.Windows.Forms.Label();
            lblHW.AutoSize     = true;
            lblHW.Location     = new System.Drawing.Point(99, 32);
            lblHW.Text     = "MainForm!!";

            ClientSize = new System.Drawing.Size(284, 161);
            Controls.Add(this.lblHW);
            Text = "MainForm !!";

            HWSubForm subForm = new HWSubForm();
            subForm.Show();
        }
        } // HWForm

    public class HWSubForm : Form
    {
            private Label     lblHW;

        public HWSubForm()
        {

            lblHW        = new System.Windows.Forms.Label();
            lblHW.AutoSize     = true;
            lblHW.Location     = new System.Drawing.Point(99, 32);
            lblHW.Text     = "SubForm!!";

            ClientSize = new System.Drawing.Size(284, 161);
            Controls.Add(this.lblHW);

            Text = "SubForm !!";
        }

        } // HWSubForm
}
Avatar billede koppelgaard Praktikant
11. september 2007 - 14:25 #6
Tak for hjælpen!
Sender du et svar
Avatar billede sherlock Nybegynder
11. september 2007 - 14:41 #7
:)
Avatar billede koppelgaard Praktikant
11. september 2007 - 15:29 #8
En ting har jeg glemt.
Hvis man vil gå begge veje. Fra den ene form til den anden og den anden til den ene?

Michael
Avatar billede sherlock Nybegynder
11. september 2007 - 16:33 #9
Igen... Et simpelt eksempel :)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace HelloWorldApp
{
    static class HelloWorld
    {

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new HWForm());
        }
    } // HelloWorld

    public class HWForm : Form
    {
            public  Label         lblHW;
        private Button          btnTest;
        private    HWSubForm     subForm;
        public HWForm()
        {

            btnTest = new System.Windows.Forms.Button();
            btnTest.Location = new System.Drawing.Point(102, 83);
            btnTest.Size = new System.Drawing.Size(75, 23);
            btnTest.Text = "Test";
            btnTest.Click += new System.EventHandler(btnTest_Click);

            lblHW        = new System.Windows.Forms.Label();
            lblHW.AutoSize     = true;
            lblHW.Location     = new System.Drawing.Point(99, 32);
            lblHW.Text     = "MainForm!!";

            ClientSize = new System.Drawing.Size(284, 161);
            Controls.Add(this.btnTest);
            Controls.Add(this.lblHW);
            Text = "MainForm !!";

            subForm = new HWSubForm();
            subForm.Owner = this;
            subForm.Show();
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            subForm.lblHW.Text = "Værdi fra mainForm";
        }
        } // HWForm

    public class HWSubForm : Form
    {
            public Label         lblHW;
        private Button          btnTest;

        public HWSubForm()
        {

            btnTest = new System.Windows.Forms.Button();
            btnTest.Location = new System.Drawing.Point(102, 83);
            btnTest.Size = new System.Drawing.Size(75, 23);
            btnTest.Text = "Test";
            btnTest.Click += new System.EventHandler(btnTest_Click);

            lblHW        = new System.Windows.Forms.Label();
            lblHW.AutoSize     = true;
            lblHW.Location     = new System.Drawing.Point(99, 32);
            lblHW.Text     = "SubForm!!";

            ClientSize = new System.Drawing.Size(284, 161);
            Controls.Add(this.btnTest);
            Controls.Add(this.lblHW);

            Text = "SubForm !!";
        }
        private void btnTest_Click(object sender, EventArgs e)
        {
            ((HWForm)Owner).lblHW.Text = "Værdi fra subForm";
        }

        } // HWSubForm
}
Avatar billede koppelgaard Praktikant
11. september 2007 - 18:55 #10
Hvor lægger jeg testen ind.
I et windows projekt?
og  hvis, skal jeg så paste den ind oven i den form der er der?
Avatar billede lasserasch Juniormester
12. september 2007 - 08:42 #11
Det eneste som man bare skal huske på når man skal kalde andre forms metoder er i korte træk følgende :

1. Fra form1 skal du oprette en ny reference til form2.
2. De metoder i form2 som skal kunne kaldes fra form1 skal være public. Dvs. f.eks. : public void Form2_metode1()
3. Hvis du skal kunne kalde tilbage igen til form1 fra form2 skal du lave en metode på form2 som f.eks. ser sådan her ud :

public void Init(Form1 F2)
{
this.F1 = F2;
this.Show();
}

Og F1 er på Form2 en ny reference til Form1. Ala : private Form1 F1;

Så kan du nemlig fra Form2 referere tilbage til Form1 vha. F1.

F.eks. : F1.minpublicmetodepåform1();


Håber du har forstået sammenhængen.

/Lasse
Avatar billede sherlock Nybegynder
12. september 2007 - 11:57 #12
"Hvor lægger jeg testen ind.
I et windows projekt?
og  hvis, skal jeg så paste den ind oven i den form der er der?"

Jeg har ikke lige VS her på arbejde, så eksemplet skal oversættes med "csc test.cs" (forudsat at du gemmer filen som test.cs :) )

I VS skal du lave 2 forms og kopiere de respektive linier ind i. Application-koden er allerede lavet af VS i program.cs.
Avatar billede koppelgaard Praktikant
14. september 2007 - 09:00 #13
Undskyld undskyld !!
Jeg har overset dit svar.
Kikker på det når jeg kommer hjem !!
Avatar billede koppelgaard Praktikant
15. september 2007 - 08:36 #14
Hej Lasse og Sherlock !
Nu har jeg kikket på jeres svar.
Der kommer desværre en fejl flere fejl, når jeg køre dit projekt på den beskevne måde Sherlock
Har du selv prøvet at køre det ?

Lasse tak for dit svar!
Nu tror jeg den er trængt ind i !!

Godt jeg har eksperten :-)
Avatar billede koppelgaard Praktikant
16. september 2007 - 15:07 #15
Ja nu er den helt hjemme.
Jeg har prøvet din forklaring Lasse. Det virker!
Ked at jeg ikke har brugt dit eksempel sherlock.

For mig var det ikke et helt simpelt eksempel. Og der kom nogle fejl med namespace.

:-)    Michael
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