Avatar billede ahara Nybegynder
19. august 2005 - 10:31 Der er 17 kommentarer og
1 løsning

Benytte metode i en anden Form

Jeg har tre Forms. Mit problem er at når jeg laver en ny instans af Form2 inde i min Form1 så har jeg ikke mulighed for at benytte mig af metoderne i Form2. Nogen der ved hvorfor?

Her er lidt kode:

Form2 myForms2 = new Form2();
Form3 myForms3 = new Form3();

Men jeg kan ikke lave myForms2.Test();

Test er en public metode i Form2
Avatar billede smsng Nybegynder
19. august 2005 - 10:40 #1
er Test en metode af typen

public void Test(object sender, EventArgs e)??
Avatar billede ahara Nybegynder
19. august 2005 - 10:44 #2
nope
Avatar billede smsng Nybegynder
19. august 2005 - 10:47 #3
kan du ikke vise Test()??
Avatar billede spif2001 Nybegynder
19. august 2005 - 10:49 #4
er det ikke bare Intellisensen der driller?

Kan du ikke compilere det?

Hvis du kan er der jo ikke noget galt...
Avatar billede spif2001 Nybegynder
19. august 2005 - 10:50 #5
Hvis du kan compilere - så prøv at genstarte VS - så plejer intellisensen at fungere igen...
Avatar billede ahara Nybegynder
19. august 2005 - 10:58 #6
Det er Test() jeg ikke kan få vist.

Jeg får følgende fejl:

'System.Windows.Forms.Form' does not contain a definition for 'Test'

Har prøvet at genstarte uden hjælp
Avatar billede spif2001 Nybegynder
19. august 2005 - 11:00 #7
????

Den besked skulle komme hvis du kaldte på en Form og ikke en nedarvet Form2

f.eks.

Form f = new Form();
f.Test();

Her giver det sig selv, at Form ikke har test metoden.
Avatar billede spif2001 Nybegynder
19. august 2005 - 11:01 #8
Form2 myForms2 = new Form2();
Form3 myForms3 = new Form3();

det står sådan i koden?

og ikke:

Form2 myForms2 = new Form();
Form3 myForms3 = new Form();
Avatar billede spif2001 Nybegynder
19. august 2005 - 11:06 #9
Følgende kode virker fint hos mig - har udeladt autogenereret kode:

namespace WindowsApplication1
{
    public class Form1 : System.Windows.Forms.Form
    {
        public Form1()
        {
            InitializeComponent();
            MyFormType mine = new MyFormType();
            mine.Test();
        }
    }

    public class MyFormType : Form
    {
        public MyFormType()
        {

        }

        public void Test()
        {

        }
    }
}
Avatar billede smsng Nybegynder
19. august 2005 - 11:12 #10
Et hurigt lille eksemple du kan bruge..

Form1:

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

namespace WindowsApplication2
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.Label label1;
       
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(80, 72);
            this.button1.Name = "button1";
            this.button1.TabIndex = 0;
            this.button1.Text = "hent Form2";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // button2
            //
            this.button2.Location = new System.Drawing.Point(80, 152);
            this.button2.Name = "button2";
            this.button2.TabIndex = 1;
            this.button2.Text = "Hent navn";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(80, 192);
            this.label1.Name = "label1";
            this.label1.TabIndex = 2;
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
          }
       
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

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

        private void button2_Click(object sender, System.EventArgs e)
        {
            if(Form2.textBox1.Text != "")
            {
                this.label1.Text = "Hej " + Form2.textBox1.Text;
            }
        }
    }
}

Form2:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication2
{
    public class Form2 : System.Windows.Forms.Form
    {
        public static System.Windows.Forms.TextBox textBox1;
        public static System.Windows.Forms.Button button1;
        public static string navn;
       
        private System.ComponentModel.Container components = null;

        public Form2(Form owner)
        {
            this.Owner = owner;
            InitializeComponent();
          }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            Form2.textBox1 = new System.Windows.Forms.TextBox();
            Form2.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // textBox1
            //
            Form2.textBox1.Location = new System.Drawing.Point(88, 112);
            Form2.textBox1.Name = "textBox1";
            Form2.textBox1.TabIndex = 0;
            Form2.textBox1.Text = "";
            //
            // button1
            //
            Form2.button1.Location = new System.Drawing.Point(96, 144);
            Form2.button1.Name = "button1";
            Form2.button1.TabIndex = 1;
            Form2.button1.Text = "Gem navn";
            Form2.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // Form2
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(Form2.button1);
            this.Controls.Add(Form2.textBox1);
            this.Name = "Form2";
            this.Text = "Form2";
            this.ResumeLayout(false);
          }        

        private void button1_Click(object sender, System.EventArgs e)
        {
            navn = Form2.textBox1.Text;
            this.Hide();
        }
    }
}
Avatar billede ahara Nybegynder
19. august 2005 - 13:16 #11
Det virker med det eksempel jeg viste jer, men hvis jeg putter mine Forms ind i et array så kan jeg ikke benytte metoden Test() i Form2.

Form[] myforms = new Form[2];

myforms[0] = this;
myforms[1] = new Form2(myforms);
myforms[2] = new Form3(myforms);

myforms[1].Test(); kan ikke benyttes. Ved i hvorfor?
Avatar billede spif2001 Nybegynder
19. august 2005 - 13:24 #12
Form[] myforms = new Form[3]; //Du skal skrive 3 her, hvis du vil have 3 elementer i


Kan du gøre det her?
((Form2)myforms[1]).Test();
Avatar billede spif2001 Nybegynder
19. august 2005 - 13:26 #13
du kan sikre dig mod typecast fejl ved at gøre sådan her:

if(((Form2)myforms[1]).GetType() == typeof(Form2))
  ((Form2)myforms[1]).Test();
Avatar billede ahara Nybegynder
19. august 2005 - 13:26 #14
Jeps. Nu virker det men hvad hvar det lige du ændrede
Avatar billede ahara Nybegynder
19. august 2005 - 13:27 #15
argh typecastede du Form til Form2
Avatar billede spif2001 Nybegynder
19. august 2005 - 13:28 #16
jeps
Avatar billede ahara Nybegynder
19. august 2005 - 13:30 #17
et svar og der er point. tak for hjælpen begge
Avatar billede spif2001 Nybegynder
19. august 2005 - 13:31 #18
svar :)
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