try und catch

hi
bin ein ziemlicher Anfänger in Sachen programmieren und ich soll für meine Arbeit ein Prog schreiben wobei ich die try und catch attribute benötige.

In galileo open book c# benutzen sie dabei die variable "e" aber bei mir geht das nicht.
Kann mir da vielleicht jemand helfen??

hier mein bisheriges Ergebnis:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
double p1x, p2x, p1y, p2y, m, b;
string stm, stb;

p1x = Convert.ToDouble(textBox1.Text);
p1y = Convert.ToDouble(textBox2.Text);
p2x = Convert.ToDouble(textBox3.Text);
p2y = Convert.ToDouble(textBox4.Text);

m = p2y - p1y / p2x - p1x;
b = p2y - m * p2x;

stm = Convert.ToString(m);
stb = Convert.ToString(b);

//hier auf Ausnahmen achten
try
{
p1x = p2x;
}

//Ausnahmen die im try Block autreten werden hierher übermittelt
catch(Exception )
{

MessageBox.Show("x1 darf nicht gleich x2 sein",
"Achtung",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}

textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);


}
}
}

danke schonmal im vorraus

Mit freundlichen Grüßen Schnauf
 
Bitte benutz das nächste mal Code-Tags, so hier:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			double p1x, p2x, p1y, p2y, m, b;
			string stm, stb;

			p1x = Convert.ToDouble(textBox1.Text);
			p1y = Convert.ToDouble(textBox2.Text);
			p2x = Convert.ToDouble(textBox3.Text);
			p2y = Convert.ToDouble(textBox4.Text);

			m = p2y - p1y / p2x - p1x;
			b = p2y - m * p2x;

			stm = Convert.ToString(m);
			stb = Convert.ToString(b);

			//hier auf Ausnahmen achten
			try
			{
				p1x = p2x;
			}
			//Ausnahmen die im try Block autreten werden hierher übermittelt
			catch(Exception )
			{

				MessageBox.Show("x1 darf nicht gleich x2 sein",	"Achtung",
				MessageBoxButtons.OK,
				MessageBoxIcon.Warning);
			}

			textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);
		}
	}
}

So, wie du es geschrieben hast, kann es nicht funktionieren.
Bei einem einfachen Vergleich (p1x = p2x;) wird keine Exception geworfen. Du solltest dir nochmal genau durchlesen, was das ist und wie es funktioniert.

Für diesen einfachen Vergleich brauchst du diese nicht, da würde ich es so machen:
Code:
if(p1x == p2x)
{
	MessageBox.Show("x1 darf nicht gleich x2 sein",	"Achtung",
	MessageBoxButtons.OK,
	MessageBoxIcon.Warning);
}
 
M4CH!N3 hat recht. Dabei wird keine Exception geworfen.

Original von Schnauf
In galileo open book c# benutzen sie dabei die variable "e" aber bei mir geht das nicht.

Mit "Geht nicht" kann man nicht viel anfangen. Mehr Info!



Code:
catch(Exception e)
{
   MessageBox.Show("Fehler " + e.Message,
   "Achtung",
   MessageBoxButtons.OK,
   MessageBoxIcon.Warning);
}

Einfaches Beispiel für eine Exception wäre eine Division durch 0.
 
Ich schließe mich hier mal meinen Vorrednern an.
Wenn du unbedingt try catch in deinem Beispiel verwenden willst dann pack die Zeile m = p2y - p1y / p2x - p1x; in den Block, also etwa so:

Code:
...
p1x = Convert.ToDouble(textBox1.Text);
p1y = Convert.ToDouble(textBox2.Text);
p2x = Convert.ToDouble(textBox3.Text);
p2y = Convert.ToDouble(textBox4.Text);

try{  // Division durch 0 abfangen
     m = p2y - p1y / p2x - p1x;
}
catch(Exception e)
{
   MessageBox.Show("Fehler " + e.Message,
   "Achtung",
   MessageBoxButtons.OK,
   MessageBoxIcon.Warning);
}

b = p2y - m * p2x;

stm = Convert.ToString(m);
stb = Convert.ToString(b);
...

Das Beispiel behandelt jetzt aber nicht den Fall, was mit m ist, wenn die Exception geworfen wurde. stm = ... könnte hier also auch noch kritisch werden
 
Ich wollt eigentlich net klugscheißern, aber nachdem schon 2 Leute den Fehler machen: Spezielle Exceptions verwenden, in dem Fall die DivideByZeroException.
 
@ M4CH!N3

kannst du mir dann vlt auch noch einen "else" code dafür geben??
das programm dient einer geradengleichung
und wenn x1 =x2 ist darf kein Ergebnis herrauskommen
 
Original von t3rr0r.bYt3
Ich wollt eigentlich net klugscheißern, aber nachdem schon 2 Leute den Fehler machen: Spezielle Exceptions verwenden, in dem Fall die DivideByZeroException.

Da gebe ich dir natürlich Recht, aber ich war mir jetzt auf die Schnelle nicht sicher, ob man hier nicht auch noch eine OverflowException provozieren kann, denke aber mal ja. Um das nun zum Erklären nicht zu kompliziert zu machen, bin ich halt bei der einfachen Exception geblieben, zumal diese ja auch funktioniert ;)
 
ja sie hätte funktioniert aber war für mich in dem sinne nicht relevant
M4CH!N3´s Lösung war die die ich gebraucht habe

EDIT: hat sich erledigt habs rausgefunden. Ich stells mal rein

Code:
using System;
using System.Collections.Generic; 
using System.ComponentModel;
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms;  

namespace WindowsApplication1 
{
          public partial class Form1 : Form
       {         public Form1()
           {             InitializeComponent();

            }          private void button1_Click(object sender, EventArgs e)         {                          
              try
             {  
                                double p1x, p2x, p1y, p2y, m, b;
                                 string stm, stb;                 
                            
                 p1x = Convert.ToDouble(textBox1.Text);
                 p1y = Convert.ToDouble(textBox2.Text);
                 p2x = Convert.ToDouble(textBox3.Text);
                 p2y = Convert.ToDouble(textBox4.Text);

                 if (p1x == p2x)
                 {                    
                  MessageBox.Show("x1 darf nicht gleich x2 sein", Achtung",  MessageBoxButtons.OK,  MessageBoxIcon.Warning);
                 }

                 else
                 {

                 m = p2y - p1y / p2x - p1x;
                 b = p2y - m * p2x;
                
                 stm = Convert.ToString(m);
                 stb = Convert.ToString(b);

                 textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);
                 }
          }
               catch
         {
              MessageBox.Show("Kovertierungfehler", "Achtung", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
       }
     }
 }


danke nochmal an alle die mir helfen wollten und geholfen haben
 
So richtig schön ist das aber nicht, wenn Du mit try-catch ohne Exception arbeitest. Theoretisch kann der Spring in den catch-Block verschiedene Ursachen haben, und die kriegst Du über die Exception raus.
Im Moment gibst Du pauschal die Meldung "Kovertierungfehler" aus, egal welche Ursache der Fehler hatte.
Angenommen der Fehler entsteht nicht beim Konvertieren, sondern z.B. beim Auslesen der Textboxen. Du wirst trotzdem die Meldung "Kovertierungfehler" bekommen. Verwirrend für den Anwender.
 
Hi,

Sry für die OT, aber ich habe eine kleine Frage die mich schon ewigst beschäftigt.
Warum werden des öfteren mehrere derived Exceptions implementiert um diverse Fehler abzufangen, anstatt einfach die Baseclass Exception zu verwenden?
Des öfteren macht es für mich durchaus Sinn. Zb wenn man eine outofrange Exception anders behandeln will, als eine dividebyzero Exception.

Ich nehm mal ein Beispiel aus nen OpenBook her, bei welchem ich die Baseclass Exception bevorzugen würde:
Code:
  try {  
    obj.GetData();  
  }  
  catch (FileNotFoundException e) {  
    // falls die angegebene Datei nicht existiert  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }  
  catch (ArgumentException e) {  
    // falls der Anwender einen Leerstring übergibt  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }  
  catch (DirectoryNotFoundException e) {  
    // falls das Verzeichnis nicht existiert  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }



Warum die 3fache Schreibarbeit, wenn ich es auch einfach wie folgt lösen könnte:
Code:
  try {  
    obj.GetData();  
  }  
  catch (Exception e) {  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }


Die einzige logische Erklärung, welche mir einfällt währe, dass die 2te Variante
mit schlechten Programmierstil gleichzusetzten ist.

mfg Binäru$
 
Ich denke, dass das nur ein Beispiel war.
Das erste Beispiel ist eher für Fälle bei denen in den einzelnen catch-Blöcken etwas anderes passieren soll (in der Regel mehr als nur eine Fehlermeldung).
 
naja stimmt schon aber mein ausbilder meinte es sei sehr gut so^^

also belasse ich es mal dabei aber danke für die gute hilfe

ich werde mich bestimmt wieder melden aber ihr könnt mich ja auch mal über icq anschreiben und mir einen crashkurs im programmieren geben wenn ihr wollt.

bin immer so gegen 18 Uhr am PC

ICQ: 266873497

Mit freundlichen Grüßen

Sven
 
Original von Schnauf
naja stimmt schon aber mein ausbilder meinte es sei sehr gut so^^

also belasse ich es mal dabei aber danke für die gute hilfe

ich werde mich bestimmt wieder melden aber ihr könnt mich ja auch mal über icq anschreiben und mir einen crashkurs im programmieren geben wenn ihr wollt.

bin immer so gegen 18 Uhr am PC

ICQ: 266873497

Mit freundlichen Grüßen

Sven
[OT]
Ich denke fpr den Crashkurs sollte dein Ausbilder verantwortlich sein, oder?
Sprich Ihn mal drau an und frag ihn, ob er dir einige Kniffe und Trick zeigen könnte.
Grundlagen sollten ja bei dir schon vorhanden sein.

Hab dich mal geaddet im ICQ. Wenn du fragen o.Ä. hast kannste mich gerne fragen.
[/OT]
 
naja er sagt mir die ganze Zeit, das ich autodidaktisch arbeiten soll.
Klappt ja auch im Prinzip aber wenn ich irgentwo häng und dann net weiterkomm dachte ich eigendlich das ich dann Hilfe von ihm bekommen würde. Das war aber nicht der Fall...
Naja
hab dann ja jetzt trotzdem nen ansprechpartner^^

Mit freudlichen Grüßen
Schnauf



von mir aus close
 
Zurück
Oben