2 Pluspunkte 0 Minuspunkte

Ich habe ein Windows Forms Programm in Visual Studio. Das Mainform (Form1) öffnet ein anderes Form (Form2) und übergibt eine Referenz auf sich selbst (this).

public partial class Form1: Form
{
	
	public string testString = "";
	
	public Form1()
	{
		InitializeComponent();
	}
	
	private void button1_Click(object sender, EventArgs e)
	{
		Form2 f = new Form2(this);
		f.Show();
	}
	
}

Wenn ich aber versuche in Form2 auf den teststring zuzugreifen kommt eine NullReference.

public partial class Form2: Form
{
	
	public Form1 form1;
	
	public Form2(Form1 form1)
	{
		InitializeComponent();
		this.form1 = form1;
	}
	
	private void button1_Click(object sender, EventArgs e)
	{
		this.form1.testString = "Hello world";
	}
	
}

Im Internet finde ich aber lauter Beschreibungen das das funktioniert. Was mache ich da falsch?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du kannst aus deinem Main Form (Form1) eine statische Instanz machen um von überall darauf zugreifen zu können.

public partial class Form1: Form
{
	
	public static Form1 Instance { get; private set; }
	public string testString = "";
	
	public Form1()
	{
		InitializeComponent();
		Instance = this;
	}
	
	private void button1_Click(object sender, EventArgs e)
	{
		Form2 f = new Form2();
		f.Show();
	}
	
}

Dann musst du auch keine Referenz übergeben sondern kannst direkt darauf zugreifen.

public partial class Form2: Form
{
	
	public Form2()
	{
		InitializeComponent();
	}
	
	private void button1_Click(object sender, EventArgs e)
	{
		if (Form1.Instance != null)
		{
			Form1.Instance.testString = "Ein test"; // Zugriff auf statische Instanz
		}
	}
	
}
von (1.3k Punkte)