C# kann nicht von Form2 den Buttontext von Form1 ändern

... komplette Frage anzeigen

2 Antworten

Zum einen muss Form2 wissen, was für einen Handle Form1 hat. du musst also, rufst du eine neue Instanz von Form2 auf, auch das Handle von Form1 übergeben. Ändere dazu den Konstruktor der Form2 wie folgt:

Form1 m_form1 = null;

public Form2(string frm1)
{
  InitializeComponent();

  m_form1 = frm1; 
}

Das Handle von Form1 hast du mit m_form1 im gesamten Form2 zur Verfügung.

Das Form2 rufst du zukünftig wie folgt auf:

Form2 frm = new Form2(this);
frm.Show();

Dann bastele dir eine neue Funktion in Form1, die dir erlaubt, den Button-Text zu ändern. Die sieht wie folgt aus:

public string ButtonTextChange(string newButtonText)
{
  get { return button1.Text; }
  set { button1.Text = value; }
}

In Form2 kannst du jetzt beliebig den Buton.Text ändern, ohne dabei den Zugriff auf ein Control zu verändern, was wenig professionell ist.

m_form1.ButtonTextChange("Neuer Text");
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Toraka
31.03.2012, 18:34

Gerne hätte ich noch etwas angefüngt, die Zeit war aber leider vorbei, obwohl ich alles schon geschrieben hatte. Also ein weiteres Kommentar.

Ich erwähnte oben "Form2 rufst du nun wie folgt auf:", wobei das natürlich nur innerhalb von Form1 gilt. Hast du ein Form3 oder Form4, wird das "this" natürlich auf das falsche Form verweisen und die Funktion "ButtonTextChange" würde nicht gefunden.

Insgesamt ist die beschriebende Lösung abgerundet und perfekt. Mit public Controls würde ich auf keinen Fall arbeiten. Solltest du noch Fragen haben, nur zu, ich bin gerade online.

0
Kommentar von Toraka
31.03.2012, 18:37

Zwei Fehler müssen korrigiert werden: Lösche bitte beim Property "ButtonTextChange" den Parameter vollständig! Die sieht dann wie folgt aus:

public string ButtonTextChange
{
    get { return button1.Text; }
    set { button1.Text = value; }
}

Der Parameter wie dann nicht wie eine Funktion aufgerufen, wie obig ganz unten dargestelt, sondern wie ein normaler Parameter.

m_form1.ButtonTextChange = "Neuer Text";
0

Du musst den Modifier von button1 auf "internal" setzen. In der EinstellungForm.Designer.cs steht da bestimmt noch private drin.

Einfach im "Eigenschaften" Fenster editieren.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?