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
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
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?
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Gibt es einen schon einen Thread wo man sieht wie man die Form in einer anderen bekannt macht?
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.