Laden...

Funktion aus einer Form in einer anderen ausführen

Erstellt von Michael86 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.374 Views
M
Michael86 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren
Funktion aus einer Form in einer anderen ausführen

Hallo,

vorneweg, ich muss mich seit langer Zeit ohne C# in ein altes Programm das ich nicht selbst geschrieben habe hinein finden...
Dabei tauchen jetzt eventuell Probleme auf, die für viele wahrscheinlich recht simpel sind, bitte zerlegt mich hier nicht in Einzelteile 😃

Ich müsste aktuell aus einer anderen Form einen String umbenennen und dann 2 Funktionen dieser Form nutzen.
Problem ist, dass ich mir aktuell hierzu eine neue Instanz erstelle, ich aber nicht möchte dass der Konstruktor erneut ausgeführt wird. Wie kann ich denn das umgehen?

Oder kann ich die Funktion auch ohne eine neue Instanz aufrufen? Das wäre die beste lösung denke ich. Also einfach etwas wie: MainForm.Start();

Oder gibt es eine ganz einfache Lösung, die Funktion oder Variablen komplett global zu haben?

Hier mal ein Ausschnitt aus dem Code
Meine Main Form heißt MainForm, hier habe ich folgende Variabel und Funktionen:

public partial class MainForm : Form
{
     public string SDF;
     public MainForm(MDIParent hf)
        {
        //Hier ist mein Konstruktor, den möchte ich umgehen
        }
     public void Start()
        {
        //Hier ist meine Funktion 
        }
     public void Stop()
        {
        //Hier ist meine Funktion 
        }
}

In meiner Form SpecForm, möchte ich folgendes nutzen:

public partial class SpecForm : Form
{
     if (radioButton_1.Checked == true)
            {
                MainForm MainFrm = new MainForm();
                MainFrm.SDF = "";  
                MainFrm.Stop();
                MainFrm.Start();
           }
}

vielen Dank im Voraus,
mit freundlichen Grüßen
Michael

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

Das zweite Form sollte das erste gar nicht kennen, sondern Events anbieten, die vom ersten Form abonniert werden.
schau Dir mal [FAQ] Kommunikation von 2 Forms an.

Gruß, MarsStein

Edit: Und die dort verlinkten Threads auch, zum besseren Verständis...

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
Michael86 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Vielen Dank für deine Antwort.

Problem ist, dass ich auf die schnelle einfach unmöglich das ganze Programm umschreiben oder neu aufsetzen kann um solche Events zur Verfügung zu stellen.

Aber wenn ich das richtig verstehe, kann ich nicht ganz simpel eine Funktion einer Form in einer anderen Form aufrufen oder?

16.842 Beiträge seit 2008
vor 7 Jahren

Dann hast Du es von Anfang an ziemlich schlecht umgesetzt, wenn es jetzt nicht mehr änderbar ist; quasi gegen die Wand gefahren 😉
Es bleibt Dir also jetzt nur noch der Bastel-Weg - oder Du machst es richtig, wie es in der FAQ gezeigt wird.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

offenbar ist das Programm ja bisher so geschrieben, dass MainForm in der anderen Form nicht bekannt ist (sonst hättest Du das Problem nicht).

Das Programm müsste IMO dann für die gewünschte Funktionalität nicht umgeschrieben, sondern erweitert werden. Dann ist es aber nicht aufwändiger, es gleich richtig zu machen, als zu frickeln.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
Michael86 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Gibt es einen schon einen Thread wo man sieht wie man die Form in einer anderen bekannt macht?

D
985 Beiträge seit 2014
vor 7 Jahren

Wenn du das minimal invasiv angehen möchtest, dann schreib dir ein Interface, was eben die Funktionalitäten beinhaltet, die deine Form2 benötigt.

Dises Interface implementierst du dann (für diese Flickschusterlösung) in der Mainform.

Die Form2 bekommt dann nur dieses Interface mitgeteilt (per Konstruktor oder Property) und arbeitet dann mit diesem Interface.

Dann hast du wenigstens auch für die Zukunft schon mal den richtigen ersten Schritt gemacht.