|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 26.02.2012, 14:06 Titel: C# Graphic |
|
|
Hallo,
kann man irgend wie eine try-catch Methode für ein Taschenrechner bauen
der zwei eingabe felder abfängt für alle rechenoperationen?
Baue mir gerade ein kleinen Forms Taschenrechner zusammen und will da was mit try catch machen.
Will nicht in jeder Rechenoperation nen neuen try-catch hineinschreiben.
So weit bin ich erst und henge gedanklich fest.
CPP: | private void buttonBrechnen_Click(object sender, EventArgs e)
{
float zahl1, zahl2, ergebnis = 0;
bool divDurchNull = false;
// die beiden Zahlen einlesen und konvertieren
zahl1 = Convert.ToSingle(textBoxZahl1.Text);
zahl2 = Convert.ToSingle(textBoxZahl2.Text);
// Die Rechenoperation ermitteln und ausführen
if (radioButtonAddition.Checked == true)
{
ergebnis = zahl1 + zahl2;
}
if (radioButtonSubtraktion.Checked == true)
{
ergebnis = zahl1 - zahl2;
}
if (radioButtonMultiplikation.Checked == true)
{
ergebnis = zahl1 * zahl2;
}
if (radioButtonDivision.Checked == true)
{
if (zahl2 == 0)
{
divDurchNull = true;
}
else
{
ergebnis = zahl1 / zahl2;
}
}
// wurde durch Null dividiert?
if (divDurchNull == true)
{
labelAnzeigen.Text = "Nicht definiert!";
}
else
{
labelAnzeigen.Text = Convert.ToString(ergebnis);
}
} |
mfg Patrick
Zuletzt bearbeitet von City Hunter am 07.03.2012, 17:50, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 26.02.2012, 14:59 Titel: |
|
|
Was willst du denn alles abfangen? Und was kann der Taschenrechner?
Also Division durch 0 kannst du so wie du gemacht hast abfangen.
Eine echte Möglichkeit mit Try-Catch wäre aber z.B.
CPP: | private void buttonBrechnen_Click(object sender, EventArgs e)
{
try {
[...]
if(radioButtonAddition.Checked) {
ergebnis = zahl1 + zahl2;
}
[...]
labelAnzeigen.Text = ergebnis.ToString();
} catch(Exception e) {
labelAnzeigen.Text = "Error: " + e.Message;
}
}
|
Damit fängst du alle Fehler ab, welche auftreten können und gibst ggf. den Fehlertext aus.
Alternative Vorgehensweisen:
- Eingabevalidierung
- Ausgrauen der Option "Dividieren", wenn die 2. Zahl eine 0 ist
HTH _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 26.02.2012, 15:06 Titel: |
|
|
ich dachte für null nehme ich dafür extra die Exception die gibs.
Mal schauen ob ich das hinbekomme.
wenn nicht melde ich mich denn wieder. Danke |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 26.02.2012, 15:43 Titel: |
|
|
Hm der catch wird nicht ausgefürt
wenn ich Dividiere
CPP: | catch (DivideByZeroException)
{
MessageBox.Show("Eine Division durch Null ist nicht definiert.", "Error");
} |
Habe ich da irgend wo ein fehler drin?
Kode komplett.
CPP: | private void buttonBrechnen_Click(object sender, EventArgs e)
{
float zahl1, zahl2, ergebnis = 0;
// die beiden Zahlen einlesen und konvertieren
try
{
zahl1 = Convert.ToSingle(textBoxZahl1.Text);
zahl2 = Convert.ToSingle(textBoxZahl2.Text);
// Die Rechenoperation ermitteln und ausführen
if (radioButtonAddition.Checked == true)
{
ergebnis = zahl1 + zahl2;
}
if (radioButtonSubtraktion.Checked == true)
{
ergebnis = zahl1 - zahl2;
}
if (radioButtonMultiplikation.Checked == true)
{
ergebnis = zahl1 * zahl2;
}
if (radioButtonDivision.Checked == true)
{
ergebnis = zahl1 / zahl2;
}
labelAnzeigen.Text = ergebnis.ToString();
}
catch (DivideByZeroException)
{
MessageBox.Show("Eine Division durch Null ist nicht definiert.", "Error");
}
catch (FormatException)
{
MessageBox.Show("Error", "Error");
}
} |
|
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 26.02.2012, 17:56 Titel: |
|
|
So habe das Programm jetzt erweitert.
CPP: | using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Taschenrechner
{
public partial class Taschenrechner : Form
{
public Taschenrechner()
{
InitializeComponent();
}
float check(float zahl1, float zahl2)
{
float ergebnis = 0;
bool divDurchNull = false;
try
{
zahl1 = Convert.ToSingle(textBoxZahl1.Text);
}
catch (FormatException)
{
MessageBox.Show("Es ist ein Fehler aufgetreten bei der Konvertirung in der Eingabe 1: " + textBoxZahl1.Text, "Fehler");
textBoxZahl1.Select();
}
try
{
zahl2 = Convert.ToSingle(textBoxZahl2.Text);
}
catch (FormatException)
{
MessageBox.Show("Es ist ein Fehler aufgetreten bei der Konvertirung in der Eingabe 2: " + textBoxZahl2.Text, "Fehler");
textBoxZahl2.Select();
}
// Die Rechenoperation ermitteln und ausführen
if (radioButtonAddition.Checked == true)
{
ergebnis = zahl1 + zahl2;
}
if (radioButtonSubtraktion.Checked == true)
{
ergebnis = zahl1 - zahl2;
}
if (radioButtonMultiplikation.Checked == true)
{
ergebnis = zahl1 * zahl2;
}
if (radioButtonDivision.Checked == true)
{
//wird eine Division durch Null versucht?
if (zahl2 == 0)
divDurchNull = true;
else
ergebnis = zahl1 / zahl2;
}
//wurde durch Null dividiert?
if (divDurchNull == true)
{
labelAnzeigen.Text = "Nicht definiert!";
}
else
{
labelAnzeigen.Text = Convert.ToString(ergebnis);
}
return ergebnis;
}
private void buttonBeenden_Click(object sender, EventArgs e)
{
Close();
}
private void buttonBrechnen_Click(object sender, EventArgs e)
{
float zahl1 = 0;
float zahl2 = 0;
check(zahl1, zahl2);
}
}
}
|
Wenn ich jetzt nen Buchstabe eingeben egal in welcher rechenart wird leider die Zahl ausgegeben die noch in der TextBox drin ist. Kann man da irgend was machen das es da null bleibt? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 04.03.2012, 21:55 Titel: |
|
|
Ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber du solltest in den catches für die FormatException direkt ein return einbauen und ggf. vorher das Label fürs Ergebnis zurücksetzen.
Du möchtest ja eigentlich nicht, dass überhaupt angefangen wird, herumzurechnen, wenn schon das Konvertieren nicht klappt.
PS: Ist es beabsichtigt, dass du für die beiden Parameter einfach immer 0 reingibst? Oder wolltest du die eigentlich als out-Parameter definieren?
Noch eine Anmerkung: Die divDurchNull-Variable könntest du auch weglassen und den Code wesentlich schlanker gestalten:
CPP: | if( radioButtonDivision.Checked == true )
{
//wird eine Division durch Null versucht?
if( zahl2 == 0 )
{
labelAnzeigen.Text = "Nicht definiert!";
return 0;
}
ergebnis = zahl1 / zahl2;
} |
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 07.03.2012, 17:54 Titel: |
|
|
So habe das Thema mal umgestellt.
Bastell gerade mit der Graphic von C# rum. irgend wie bekomme ich das nur hin das rechtecke und kreise von Aussen nach innen gezeichnet werden aber nicht umgekehrt. hat einer da eine Internet seite für mich wie ich von innen nach aussen das so animieren lassen kann? |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 19.03.2012, 13:33 Titel: |
|
|
Sagt mal,
Rechteck im Panel zeichne lasse und das animiert von innen nach ausen. wie bekomme ich das hin das er nicht über das Panel zeichnet.
Habe mir das überlegt mit einer do while schleife aber irgend wie kriege ich die größe des panels nicht in die schleife rein.
wie würdet ihr das machen? |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 20.03.2012, 10:50 Titel: |
|
|
Ich weis zwar nicht, was du genau machen möchtest, aber Animationen per GDI Befehle zu machen finde ich schon ziemlich aufwändig.
Du kannst für deine Begrenzungen die Clip-Funktion nutzen. Müsste eine Funktion oder Eigenschaft von Graphics sein.
Für komplexere Animationen würde ich aber empfehlen, dir mal WPF anzuschauen, samt Tigger, Datenbindung und eben Animationen. Diese Techniken kannst du dann auch später in Windows8 innerhalb der Metrooberfläche nutzen, dort ist GDI nämlich tabu.
MfG AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 21.03.2012, 17:47 Titel: |
|
|
Na ich mache gerade so bissel Übungen. hab nen Panel und da wollte ich ein Rechteck mittig von innen nachausen laufen lassen und denn wieder umgekehrt.
Gut zu wissen mit WPF und Windows8 Dank dir für die Info. Muss ich mir noch ein WPF buch besorgen. |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.03.2012, 13:04 Titel: |
|
|
Code: | Fehler 1 Eine implizite Konvertierung vom Typ "System.Drawing.Drawing2D.HatchStyle" in "System.Drawing.Drawing2D.HatchBrush" ist nicht möglich. E:\Patrick\Eigene Dokumente\Visual Studio 2010\Projects\C#\Zeichen Programm\Zeichen Programm\FarbInfo.cs 39 |
Ich bekomme diesen Fehler, kann man das irgend wie Konventieren in irgend einer art?
hier der Code dazu
Code: |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Zeichen_Programm
{
public partial class FarbInfo : Form
{
// für die Zeichenfläche
Graphics infoflaeche;
// für den Stift
Pen stiftInfo;
// für den Pinsel
SolidBrush pinselInfo;
// Denn für ein MusterPinsel
System.Drawing.Drawing2D.HatchBrush musterPinselInfo;
// Muster oder Farbe?
bool FarbMuster;
public FarbInfo(Color stiftFarbe, float stiftdicke, System.Drawing.Drawing2D.DashStyle stiftStil, bool fuell, Color pinselFarbe, System.Drawing.Drawing2D.HatchStyle pinselMuster)
{
InitializeComponent();
// Instanzen für die Stifte und die Pinsel erzeugen
stiftInfo = new Pen(Color.Black);
pinselInfo = new SolidBrush(Color.Black);
musterPinselInfo = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Cross, Color.Black);
infoflaeche = this.CreateGraphics();
// Speichern in stiftInfo, pinselInfo und musterPinselInfo
stiftInfo.Color = stiftFarbe;
stiftInfo.Width = stiftdicke;
stiftInfo.DashStyle = stiftStil;
FarbMuster = fuell;
pinselInfo.Color = pinselFarbe;
musterPinselInfo = pinselMuster;
}
private void FarbInfo_Paint(object sender, PaintEventArgs e)
{
Pen stift = new Pen(Color.Black);
infoflaeche.DrawRectangle(stift, 19, 19, 101, 101);
if (FarbMuster == false)
{
infoflaeche.FillRectangle(pinselInfo, 20, 20, 100, 100);
}
infoflaeche.DrawLine(stiftInfo,10,200,265,200);
}
}
}
|
Würde dankbar sein wenn man mir helfen kann.
Ich will Sachen ausem Hauptformular in das Formular holen. alles macht erm it nur das brush und style nicht |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 25.03.2012, 20:53 Titel: |
|
|
Ich rate mal einfach so in den Raum hinein.
CPP: | new HatchBrush(myHatchStyle, color1, color2) |
http://msdn.microsoft.com/en-us/library/68k5a94e.aspx _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 28.03.2012, 20:12 Titel: |
|
|
Danke AFE. Habe das Problem gelöst und ich hatte den code schon so 3 mal geschrieben und beim vierten mal ging das.
Sag mal AFE. Ich arbeite ja gerade an ein kleines Zeichenprogramm zum testen. nutze gerade die GetPixel; MSN
Für Pixel Kopieren. Aber das macht er ja nur wenn er ein Dateiname hat.
Wenn ich das Programm starte und bissel rummalse und denn GetPixel() nutze bekomme ich eine Exception weil er ja keine Dateinamen.endung drin hat. Wie kann ich das umgehen? Mit ein TempDatei? |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.03.2012, 08:02 Titel: |
|
|
Die Funktion GetPixel ist doch nur eine Instanzfunktion auf ein Bitmap-Objekt.
Dabei ist es unerheblich, ob das ein jpg, bmp oder png ist, auch ist es unerheblich, ob die Datei überhaupt gespeichert wurde.
Du kannst Bitmap-Objekte auch aus einem GrafikKontext eines Fensters erstellen. Abgesehen davon ist GetPixel sicherlich nicht die beste Möglichkeit. Möchtest du nur einzelne Pixel kopieren - Ok, aber wenn du komplette (rechteckige) Bereiche kopieren möchtest, geht das mit anderen Funktionen einfacher und vorallem schneller. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 29.03.2012, 16:25 Titel: |
|
|
Nein AFE ich willl einfach nur gerne das Pixel haben den X,Y Koordinaten mehr nix. aber wie gesagt, GetPixel zeigt mir immer ein Exception an wenn ich es ausführe weil mein Zeichenprogramm kein Bildgeladen hat oder das aktuelle was ich gerade gemalt habe nicht abgespeichert habe. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|