Button Abfrage und verwenden in anderen Klassen

FloDra

Grünschnabel
Hallo,

ich hab mir schon quer durchs Forum gelesen und komme aber irgendwie nicht so recht weiter.

Mein Problem:

Ich habe eine eine Willkommensform mit 6 Button ( die 3 um die es mir geht sind: Neu, Laden, zur Hauptform) die am anfang meines Prog. geöffnet wird. je nachdem welchen Button man auswählt öffnet sich eine neue Form und schließt die Willkommensform. Am ende landet man jedoch immer in der Hauptform. In dieser Hauptform muss ich jedoch wissen welchen Button man am Anfang betätigt hat. Jenachdem soll nämlich die Textboxen in der Hauptform unterschiedlich gefüllt werden.

Meine Überlegung war eine Variable zu setzen und diese am Ende in der hauptfrorm abzufragen. Leider klappt es nicht so recht.

Code:
public partial class Willkommen : Form
    {
     public string i = null;
     private void button1_Click(object sender, EventArgs e)
        {
            i = "neu";
            Console.WriteLine(i);
            Neu Erf = new Neu();
            this.Hide();
            AufErf.ShowDialog();         
        }
}

public partial class Hauptprogramm : Form
    {
     Willkommen will = new Willkommen();
     Console.WriteLine(will.i);
            if (will.i == "neu")
            {
                    ....
             }
}

Wo liegt mein fehler?
 
du fragst will.i vor dem öffnen ab.

wird Willkommen als Dialog angezeigt?
wenn ja, nach dem Dialog Aufruf i abfragen.

Ansosnten könntest du das FormClosed Ereignis von Willkommen abonnieren, dort dann i abfragen und in die textbox schreiben.

Und so als Tipp gibt den Steuerelement direkt nach dem ziehen auf den designer ordentliche Namen, sprich nicht "button1" lassen.
Hilft dir einfach besser dich später im Code zurecht zu finden.

Nachtrag:
Willkommen im Forum ;)
 
du fragst will.i vor dem öffnen ab.

wird Willkommen als Dialog angezeigt?

Ich hab nebenbei noch das Consolenfenster offen und nutze es sozusagen als Anzeige welche Schitte ausgeführt werden.
Später lösche ich die Consolenausgabe dann wieder oder blende sie aus.

Ansosnten könntest du das FormClosed Ereignis von Willkommen abonnieren, dort dann i abfragen und in die textbox schreiben.

Das versteh ich noch nicht so richtig?! :confused:

Der Hintergrund ist, es sollen in eine ListBox Auftragsdaten geladen werden wenn neue Angelegt werden oder alte geladen Auftagsdaten die geladen werden. Jenachdem welchen Butten man auswählt. Die Routine mit den Auftragsdaten läuft jetzt ständig. Ich möchte aber auch die Hauptform nutzen ohne zwingend Auftragsdaten einzugeben bzw. gespeicherte Auftragsdaten laden zu müssen.

Nachtrag:
Willkommen im Forum

Danke :D
 
du hast ja über das Eigenschaftenfenster im VisualStudio ja zum Beispiel das Click Ereignis für Button1 abonniert.
Bei dem eine methode mit folgendem Namen erschien: button1_Click.

Wenn du dir mal die zugehörige designer.cs von deinem Formular anschaust wurde das Ereignis mittel += abonniert.
Ungefähr so: button1.Click +=new EventArgs(button1_Click);

Das ist salop gesagt nixs anderes als die zuweisung einer Methode zu einer Aktion.
So könntest du jetzt für dein Willkommen Formular das FormClosed Ereignis abonnieren.

Was mir jetzt grad nur unklar ist, ist dein Willkommen Formular ev. die ganze Zeit offen?
Ich bin jetzt erstmal von ausgegangen das Willkommen als Dialog aufgerufen wird.
Es wird ein Button geklickt.
Und das Formular schließt sich wieder.

Und die exe (startprojekt) selbst ist erstmal eine Consolen Anwendung?
Über die Projekteigenschaften des Projektes müsstes du es als Win Projekt ändern können, sry hab grad kein VisualStudio hier ums genau zu sagen.
 
Zuletzt bearbeitet:
Was mir jetzt grad nur unklar ist, ist dein Willkommen Formular ev. die ganze Zeit offen?
Ich bin jetzt erstmal von ausgegangen das Willkommen als Dialog aufgerufen wird.
Es wird ein Button geklickt.
Und das Formular schließt sich wieder.

Die WillkommenForm kommt direkt nach dem Start. Wenn man einen Button geklickt hat wird diese wieder geschlossen und eine neue Form öffnet sich z.B. Auftragserfassung oder Hauptmessprogram. Realisiert hab ich es z.B so:
Code:
//Button Messprogramm
        private void button3_ohneVorgang_Click(object sender, EventArgs e)
        {
            
            i = "ohne";            //Das soll meine Übergabevariable werden sie ist als public string def.
            Console.WriteLine(i);
            Hauptmessprogramm HauptMess = new Hauptmessprogramm();
            this.Hide();
            HauptMess.ShowDialog();
        }

Und die exe (startprojekt) selbst ist erstmal eine Consolen Anwendung?

Ja da ich mit hilfe der Console sehe wo ich bin im Programm. Wie oben z.B. Console.WriteLine(i);
Die Console kann ich ja später ausblenden.

Wenn du dir mal die zugehörige designer.cs von deinem Formular anschaust wurde das Ereignis mittel += abonniert.
Ungefähr so: button1.Click +=new EventArgs(button1_Click);

Das ist salop gesagt nixs anderes als die zuweisung einer Methode zu einer Aktion.
So könntest du jetzt für dein Willkommen Formular das FormClosed Ereignis abonnieren.

Das heist für mich ich schreibe im designer.cs dann: this.FormClosed +=new EventArgs( button3_ohneVorgang_Click); ?
 
Wenn du Ausgaben nur für dich haben willst, verwende am besten aus dem Namespace System.Diagnostics die Klasse Debug oder Trace mit den statischen Write Methoden.
Diese Ausgaben sieht du dann im Ouptput Fenster von VisualStudio oder auch zum Beispiel über DebugView von SysInternals.

Da du das Fenster zur Laufzeit erstellst bringt dir das in der designer.cs zu setzen nixs.
Und solange dir nicht klar ist was alles in der designer.cs ist, lass am besten erstmal die Hände davon.

Achtung jetzt nur kurz Beispiel wie du FormClosed abonnieren könntest, anderer Lösungsweg weiter unten:
Abonnieren könntest du das Ereignis direkt dort wo du das Formular aufrufst:
C#:
using(Willkommen will = new Willkommen())
{
       will.FormClosed += new FormClosedEventHandler(will_FormClosed);
       will.ShowDialog();
}

private void will_FormClosed(object sender, FormClosedEventArgs e) 
{
    .... tu was
}

Der andere Lösungsweg:
Da das Fenster sofort wieder geschlossen ist, stell in deinem Formular einfach eine Eigenschaft bereit die du abfragst.
C#:
using(Willkommen will = new Willkommen())
{
       will.ShowDialog();
       meineTextBox.Text = wil.Status; //<-- oder hier testweise dein i Feld setzen
}
Ist zwar nicht schön aber testweise könntest du auch dein Feld i auf public setzen und das abfragen.

Hoffe hab jetzt nicht zu sehr verwirrt, der Aufruf von Willkommen war mir bis dato nicht so klar.
 
Mh danke für deine Hilfe... hab es jetzt anders gelöst. Habe mir ein XML Dokument erzeugt. Speichere dort jetzt auch weitere Sachen zwischen. Somit hab ich gleich auch eine "Art" Protokoll zur nachverfolgung was wann passiert ist.
 
Zurück