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
Annonceindlæg fra SoftwareOne
19. august 2005 - 10:40
#1
er Test en metode af typen public void Test(object sender, EventArgs e)??
19. august 2005 - 10:44
#2
nope
19. august 2005 - 10:47
#3
kan du ikke vise Test()??
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...
19. august 2005 - 10:50
#5
Hvis du kan compilere - så prøv at genstarte VS - så plejer intellisensen at fungere igen...
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
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.
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();
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() { } } }
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(); } } }
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?
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();
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();
19. august 2005 - 13:26
#14
Jeps. Nu virker det men hvad hvar det lige du ændrede
19. august 2005 - 13:27
#15
argh typecastede du Form til Form2
19. august 2005 - 13:28
#16
jeps
19. august 2005 - 13:30
#17
et svar og der er point. tak for hjælpen begge
19. august 2005 - 13:31
#18
svar :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.