[C#] Försöker att anropa Form1 får problem och loop

Permalänk
Avstängd

[C#] Försöker att anropa Form1 får problem och loop

Tjo,

Det var ett par år sen jag försökte anropa Form1 men har nu fått problem med att det blir en loop.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testing { public partial class Form1 : Form { Test2 t = new Test2(); public string bil = "Saab"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { t.user(); } } }

När jag försöker anropa timer1 får jag det här felet. "field type 'testing.timer1' is less accessible than field 'testing.Form1.timer1'"

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace testing { class Test2 { Form1 form = new Form1(); public void user() { form.timer1.Enabled = true; MessageBox.Show(form.bil); } } }

Har använt Google men hittar inget som löste mitt problem.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem

Så du hänger med vad du själv gör så skapar du en ny Form1 i din klass Test2, som i sin tur skapar en ny Test2 och Test2 gör en ny form etc etc etc därav stackoverflow. Jag hade hellre skickat med min ursprungliga form som en referens till klassen.

public partial class Form1 : Form { Test2 t; public string bil = "Saab"; public Form1() { InitializeComponent(); t = new Test2(this); // här skickar du en referens till Form1 } }

som du sedan använder för att sätta en property med.

class Test2 { Form1 parent {get; set;} // denna property public void user() { parent.timer1.Enabled = true; MessageBox.Show(parent.bil); } public Test2(Form1 parent) { this.parent = parent; } }

Nu till din fråga. Du får detta exception eftersom du låter designern skriva koden till dig. I solution explorer, leta rätt på denna fil

Alltså Form1.Designer.cs där all designergenererad kod finns.

I den filen så finns det en rad där designern deklarerar din Timer

private System.Windows.Forms.Timer timer1;

notera att den är private. Ändra den till public så är det bara att tuta och köra.

Visa signatur

Corsair 750D | i5 4670k | ASUS Z87-a | 8GB Corsair Dominator | Asus GTX770-DC2OC | Samsung 840 EVO 250GB | WD 500GB X2

Permalänk
Avstängd

@reflect:

Tack för hjälpen det funkar.

Om man ska göra fler class ska man göra det på samma sätt då med?

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

@reflect:

Tack för hjälpen det funkar.

Om man ska göra fler class ska man göra det på samma sätt då med?

Jag hade nog gjort så, ja.

Visa signatur

Corsair 750D | i5 4670k | ASUS Z87-a | 8GB Corsair Dominator | Asus GTX770-DC2OC | Samsung 840 EVO 250GB | WD 500GB X2