Prgrammsteuerung

pepsi_gx

Erfahrenes Mitglied
Hallo,

in VC++ (VS 2008) habe ich ein kleines Menüprogramm geschrieben, wo 1 Textbox und ein Button stehen. Mit diesem Menu möchte ich folgendes machen:

- Nach dem Eingeben von einer Zahl in dem Textbox wird geprüft, ob die Zahl gültig ist, wenn nicht kommt Fehlermeldung.

- Wenn Textbox in Ordnung ist, wird durch Klick auf Button ein Programm mit dieser Zahl als Parameter aufgerufen.

Code sieht wie unten aus:
C++:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
			int pTime;
			Process^ oProcess=gcnew Process;

			if(this->textBox1->Text==""){
				pTime=10;
			}
			else{
				if(Int32::TryParse(this->textBox1->Text,pTime)){
					if ((pTime<5)||(pTime>300)){
						this->textBox1->Text="";
						goto input_error;	
					}
					else{
						oProcess->StartInfo->WorkingDirectory="C:\\test";
						oProcess->StartInfo->FileName="TestProgramm.exe";
						oProcess->StartInfo->Arguments="-p " + pTime;
											oProcess->StartInfo->Verb="open";
		 
						try{
							oProcess->Start();
							oProcess->Kill();
						}

						catch(Exception^ ex){
							MessageBox::Show("Setting pTime failed!");
						}

					}
				}
				else{
					MessageBox::Show("failed!");
					exit;
				}
			}
			
			input_error:
					MessageBox::Show("Please enter a number for polling time between 5-300, default is 10\n");
					exit;

 }

Idee ist, wenn die Zahl im Textbox außer Bereich von 5 bis 300 ist, wird es zurückgesetzt und das Programm aufgehalten.

Aber wenn ich das Programm ausführe mit einer Zahl im Bereich (z.B. 14), kommt immer noch die Meldung vom Block "input_error" (obwohl das Programm läuft erfolgreich), sprich ein Aussprung passiert hier nicht.

Weiß jemand, woran kann es liegen und wie ich das Programm "aussprungsweise" steuern kann?

*LG*
 
Hi.

goto Anweisungen solltest du vermeiden, das führt zu Spaghetticode.

Warum rufst du sofort nach dem Starten des Prozesses wieder Kill() auf? Das ist etwas sinnlos.

Die input_error Meldung wird natürlich immer angezeigt, da du das so programmiert hast.

Gruß

PS: Was meinst du mit "aussprungsweise" steuern?
 
Danke für die Tipps.

Die input_error Meldung wird natürlich immer angezeigt, da du das so programmiert hast.

PS: Was meinst du mit "aussprungsweise" steuern?

Den Grund habe ich schon genannt und mit "aussprungsweise" meine ich, wenn die Zahl außer dem Bereich ist ([5, 300]), soll
1. Textbox zurückgesetzt
2. eine Fehlermeldung angezeigt
3. das Programm aufgehalten werden.

Wie kann ich das umsetzen?

PS: den Befehl kill() soll ein Fehler sein, den ich wegnehmen werde.
 
Hallo,

lagere die Aktionen doch in eine eigene Methode aus (falls du sie noch öfter brauchst) , die du dann statt des "goto" aufrufst. Ansonsten kannst du ja die Messagebox auch gleich anstelle des "goto" ausführen.
Was meinst du eigentlich damit, dass das Programm aufgehalten werden soll?

Gruß
MCoder
 
1.
weise der Textbox einen Leerstring zu (this->textBox1->Text="")
2.
statt goto input_error solltest du besser
MessageBox::Show(...); return;
verwenden. Die Sprungmarke und den dazugehörigen Code musst du entfernen.
3. statt oProcess->Kill() tut dies bessere Dienste:
oProcess->WaitForExit();
exit;
 
Zurück