Entwickler-Ecke

WinForms - Prozeduren Beenden ohne GUI zu schliessen


A3eXy - Sa 26.12.09 14:56
Titel: Prozeduren Beenden ohne GUI zu schliessen
Hallo zusammen,

Ich habe schon gegoogelt und die SuFu benutzt aber leider nichts brauchbares gefunden.
Hoffe ihr könnt mir helfen :p

Wie's der Titel schon sagt, möchte ich gerne alle Prozeduren beenden ohne das dabei die GUI geschlossen wird, was z.B. bei close() passiert.


Vielen Dank

mfg


Christian S. - Sa 26.12.09 15:02

Hallo und :welcome:!

Was ist denn bei Dir eine Prozedur? :gruebel:

Grüße
Christian


A3eXy - Sa 26.12.09 15:11

Danke für die schnelle Antwort.

Für mich ist eine Prozedur, eine Funktion ohne Rückgabewert...



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        public string EingabeUser()
        {
            string strUser = Microsoft.VisualBasic.Interaction.InputBox("Geben Sie bitte den Benutzernamen ein: ""Benutzernamen""max.mustermann");
            if (strUser == "")
            {
                
            }
            return strUser;
        }


C#-Quelltext
1:
2:
3:
4:
5:
6:
        private void cmd1u1c_Click(object sender, EventArgs e)
        {
            string strUser = EingabeUser();
            string strComputer = EingabeComputer();

        }


Okay das erste ist keine Prozedur :s, sry.

Ich möchte einfach wenn jemand bei der Eingabe nichts eingibt oder auf abbrechen klickt, die Prozedur cmd1u1c_Click nicht mehr weitergeführt wird und man direkt wieder auf der GUI ist.

Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


Christian S. - Sa 26.12.09 15:16

Naja, Du kannst ja mir return; auch eine Methode beenden, die keinen Rückgabewert hat. Und dann schaust Du einfach, ob in strUser was drin steht. Wenn nicht, beendest Du die Methode.


JasonDelife - Sa 26.12.09 15:17

In C# gibt es weder Funktionen noch Prozeduren. Es gibt Methoden mit und ohne Rückgabewert. Aber das nur nebenbei.
Wenn eine Methode void (also nichts) zurückgibt, dann kann man die Ausführung auch mit return beenden, genau wie bei Methoden mit Rückgabewert. Man kann nur keinen Rückgabewert angeben.
// EDIT: Christian war schneller :)

Grüße, JasonDelife.


A3eXy - Sa 26.12.09 15:22

Ok wieder was gelernt, danke euch zwei :)

Nur mein Problem ist ja, ich möchte von EingabeUser(), auch die cmd1u1c_Click() beenden.
Wenn ich nur ein Return bei EingabeUser habe dann wird die andere ja genau gleich ausgeführt.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        public string EingabeUser()
        {
            string strUser = Microsoft.VisualBasic.Interaction.InputBox("Geben Sie bitte den Benutzernamen ein: ""Benutzernamen""max.mustermann");
            if (strUser == "")
            {
                //Abbruch von EingabeUser() und cmd1u1c_Click()
            }
            return strUser;
        }


Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


JasonDelife - Sa 26.12.09 15:25

Achso. Dann lass das in EingabeUser() so, dass er einfach den String zurückgibt. Prüfe im Click-Handler auf "".
EDIT: Codeschnipsel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
string EingabeUser() {
 string input = // ...
 return input;
}

void myButton_Click(/* ... */) {
 string userInput = EingabeUser();
 if(string.IsNullOrEmpty(userInput)) return;
 // ...
}


Grüße, JasonDelife.


A3eXy - Sa 26.12.09 15:30

Es funktioniert :D, Vielen Dank

Aber noch so nebenbei, dürfte return nicht einfach nur einmal in einer Methode vorkommen?
Von wegen schönem Code? :)

Gruss A3eXy


jaenicke - Sa 26.12.09 17:01

user profile iconA3eXy hat folgendes geschrieben Zum zitierten Posting springen:
Aber noch so nebenbei, dürfte return nicht einfach nur einmal in einer Methode vorkommen?
Von wegen schönem Code? :)
Das kann man so oder so sehen, aber das wichtigste ist, dass der Code ordentlich formatiert ist. Denn wenn man nicht mehrere Befehle, in diesem Fall zusammen mit return, in eine Zeile schreibt, übersieht man es auch nicht. Schlecht ist natürlich, wenn man es irgendwo in der Zeile weiter hinten versteckt (hinter einer if-Abfrage zum Beispiel) und niemand mehr durchblickt. ;-)