Permalänk

Behöver hjälp i csharp.

har gjort en miniräknare, hittat en bug.
Jag rkiver in 900 *10% vilket skrivs ut som 900*90, om jag vill fortsätta räkna på talet efter att jag klickat på likamed så crashar programmet och säger formatexception was not handled. hur löser jag detta?

Detta är koden:

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; using System.Media; // lade till system.media för ljud effekter using System.Threading; // för att få testa variablar för tangentbordet namespace calculator { public partial class Form1 : Form // rutan { public Form1() { InitializeComponent(); } int clear = 1; decimal result, mresult = 0; string op; //mresult saknas någonstans då jag valde att ta bort Mod || Klassen för clear int Clear(int cl) // klassen för Clear och cl { switch (cl)// switch metod för cl { case 1: { label1.Text = ""; }break; case 2: { label1.Text = ""; label2.Text = ""; op = ""; }break; case 3: { label1.Text = ""; label2.Text.Remove(Text.IndexOf('r')); }break; case 4: { label1.Text = ""; label2.Text.Remove(Text.IndexOf('s')); }break; case 5: { label1.Text = ""; label2.Text.Remove(Text.LastIndexOf(' ') + 1); }break; } return 0; } decimal eval(string op) // eval variabeln { clear = 1; try { switch (op)//operationen metoden för + - / * och resultat { case "+": result = result + Convert.ToDecimal(label1.Text); break; case "-": result = result - Convert.ToDecimal(label1.Text); break; case "/": result = result / Convert.ToDecimal(label1.Text); break; case "*": result = result * Convert.ToDecimal(label1.Text); break; default: result = Convert.ToDecimal(label1.Text);break; } } catch (System.OverflowException) {label2.Text = "";label2.Text = "Overflow"; clear=2; SystemSounds.Asterisk.Play();}// säger overflow med error ljud när resultatet är för stort catch (System.DivideByZeroException) { label2.Text = ""; label2.Text = "Cannot divide by 0"; clear = 2; SystemSounds.Asterisk.Play(); } // du kan inte dela med 0, med error ljud return result; } private void button10_Click(object sender, EventArgs e)// knapp för 0 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "0"; else SystemSounds.Beep.Play(); } private void button1_Click(object sender, EventArgs e)// knapp för 1 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "1"; else SystemSounds.Beep.Play(); } private void button2_Click(object sender, EventArgs e)// knapp för 2 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "2"; else SystemSounds.Beep.Play(); } private void button3_Click(object sender, EventArgs e)// knapp för 3 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "3"; else SystemSounds.Beep.Play(); } private void button4_Click(object sender, EventArgs e)// knapp för 4 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "4"; else SystemSounds.Beep.Play(); } private void button5_Click(object sender, EventArgs e)// knapp för 5 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "5"; else SystemSounds.Beep.Play(); } private void button6_Click(object sender, EventArgs e)// knapp för 6 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "6"; else SystemSounds.Beep.Play(); } private void button7_Click(object sender, EventArgs e)// knapp för 7 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "7"; else SystemSounds.Beep.Play(); } private void button8_Click(object sender, EventArgs e)// knapp för 8 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "8"; else SystemSounds.Beep.Play(); } private void button9_Click(object sender, EventArgs e)//knapp för 9 med ljud { clear = Clear(clear); if (label1.Text.Length < 28) label1.Text = label1.Text + "9"; else SystemSounds.Beep.Play(); } private void button11_Click(object sender, EventArgs e)// skriver dit decimal tecken i talet { if (label1.Text.Contains(",")) { SystemSounds.Beep.Play(); } else label1.Text = label1.Text + ","; } private void button12_Click(object sender, EventArgs e)// adderar tal 1 med tal 2 { if (clear == 3 || clear == 4 || clear == 5) label1.Text = label2.Text + " + "; else label2.Text = label2.Text + label1.Text + " + "; label1.Text = eval(op).ToString(); op = "+"; } private void button13_Click(object sender, EventArgs e)//subtraherar tal 1 med tal 2 { if (clear == 3 || clear == 4 || clear == 5) label1.Text = label2.Text + " - "; else label2.Text = label2.Text + label1.Text + " - "; label1.Text = eval(op).ToString(); op = "-"; } private void button14_Click(object sender, EventArgs e)// delar tal 1 med tal 2 { if (clear == 3 || clear == 4 || clear == 5) label1.Text = label2.Text + " / "; else label2.Text = label2.Text + label1.Text + " / "; label1.Text = eval(op).ToString(); op = "/"; } private void button15_Click(object sender, EventArgs e)// multiplicerar tal 1 med tal 2 { if (clear == 3 || clear == 4 || clear == 5) label1.Text = label2.Text + " * "; else label2.Text = label2.Text + label1.Text + " * "; label1.Text = eval(op).ToString(); op = "*"; } private void button20_Click(object sender, EventArgs e)// delar 1 med tal x, ränkar ut talets reciproc { if (label2.Text.Contains("reciproc")) { label2.Text = label2.Text.Insert(label2.Text.IndexOf('r'), "reciproc("); label2.Text = label2.Text.Insert(label2.Text.IndexOf(')'), ")"); } else label2.Text = label2.Text + "reciproc(" + label1.Text + ")"; label1.Text = (1 / Convert.ToDecimal(label1.Text)).ToString(); clear = 3; } private void button18_Click(object sender, EventArgs e)//räknar ut talets rot. { if (label2.Text.Contains("sqrt")) { label2.Text = label2.Text.Insert(label2.Text.IndexOf('s'), "sqrt("); label2.Text = label2.Text.Insert(label2.Text.IndexOf(')'), ")"); } else label2.Text = label2.Text + "sqrt(" + label1.Text + ")"; label1.Text = Math.Sqrt(Convert.ToDouble(label1.Text)).ToString(); clear = 4; } private void button17_Click(object sender, EventArgs e)// procent av tal 1 i decimal skrivs i tal 2 { label1.Text = (result * Convert.ToDecimal(label1.Text) / 100).ToString(); label2.Text = label2.Text + label1.Text; clear = 5; } private void button19_Click(object sender, EventArgs e)// ändrar mellan negativa och positiva tal { if (label1.Text.Contains('-')) { label1.Text = label1.Text.Remove(label1.Text.IndexOf('-'), 1); } else label1.Text = "-" + label1.Text; } private void button16_Click(object sender, EventArgs e)// räknar ihop resultat { if (clear != 3 && clear != 4 && clear != 5) label2.Text = label2.Text + label1.Text; label1.Text = eval(op).ToString(); clear = 2; } private void button22_Click(object sender, EventArgs e)// resetar allt { Clear(2); clear = 1; label1.Text = "0"; result = 0; } private void button21_Click(object sender, EventArgs e)// resetar label1 { Clear(1); clear = 1; label1.Text = "0"; } private void label1_TextChanged(object sender, EventArgs e)// denna klass används för att miniräknaren inte ska bugga ur när du skriver längre tal. { if (label1.Text.Length <= 20) { Font font = new Font("Consolas", 14, FontStyle.Regular); label1.Font = font;// om texten är mindre än 20 så är tecken storleken 14 } else if (label1.Text.Length > 20 && label1.Text.Length <= 26) { Font font = new Font("Consolas", 11, FontStyle.Regular); label1.Font = font;// om texten är mer än 20 siffror och mindra än 26 siffror så ändras tecken storleken till 11 } else { Font font = new Font("Consolas", 9, FontStyle.Regular); label1.Font = font;//annars om texten är längre än 26 siffror så ändras tecken storleken till 9 } } private void Form1_KeyDown(object sender, KeyEventArgs e)// klassen som definerar alla keydown events, keypress kan vara ett bättre val om man vill ha lägre latens { if (e.KeyCode == Keys.NumPad0)// länkar numpadens 0 till 0 knappen på miniräknaren this.button10.PerformClick(); else if (e.KeyCode == Keys.NumPad1)//länkar numpadens 1 till 1 knappen på miniräknaren this.button1.PerformClick(); else if (e.KeyCode == Keys.NumPad2)//länkar numpadens 2 till 2 knappen på miniräknaren this.button2.PerformClick(); else if (e.KeyCode == Keys.NumPad3)//länkar numpadens 3 till 3 knappen på miniräknaren this.button3.PerformClick(); else if (e.KeyCode == Keys.NumPad4)//länkar numpadens 4 till 4 knappen på miniräknaren this.button4.PerformClick(); else if (e.KeyCode == Keys.NumPad5)//länkar numpadens 5 till 5 knappen på miniräknaren this.button5.PerformClick(); else if (e.KeyCode == Keys.NumPad6)//länkar numpadens 6 till 6 knappen på miniräknaren this.button6.PerformClick(); else if (e.KeyCode == Keys.NumPad7)//länkar numpadens 7 till 7 knappen på miniräknaren this.button7.PerformClick(); else if (e.KeyCode == Keys.NumPad8)//länkar numpadens 8 till 8 knappen på miniräknaren this.button8.PerformClick(); else if (e.KeyCode == Keys.NumPad9)//länkar numpadens 9 till 9 knappen på miniräknaren this.button9.PerformClick(); else if (e.KeyCode == Keys.Add)//länkar numpadens + till + knappen på miniräknaren this.button12.PerformClick(); else if (e.KeyCode == Keys.Subtract)//länkar numpadens - till - knappen på miniräknaren this.button13.PerformClick(); else if (e.KeyCode == Keys.Divide)//länkar numpadens / till / knappen på miniräknaren this.button14.PerformClick(); else if (e.KeyCode == Keys.Multiply)//länkar numpadens * till * knappen på miniräknaren this.button15.PerformClick(); else if (e.KeyCode == Keys.Decimal)//länkar numpadens , till , knappen på miniräknaren this.button11.PerformClick(); if (e.KeyCode == Keys.D0)//länkar 0 till 0 knappen på miniräknaren this.button10.PerformClick(); else if (e.KeyCode == Keys.D1)//länkar 1 till 1 knappen på miniräknaren this.button1.PerformClick(); else if (e.KeyCode == Keys.D2)//länkar 2 till 2 knappen på miniräknaren this.button2.PerformClick(); else if (e.KeyCode == Keys.D3)//länkar 3 till 3 knappen på miniräknaren this.button3.PerformClick(); else if (e.KeyCode == Keys.D4)//länkar 4 till 4 knappen på miniräknaren this.button4.PerformClick(); else if (e.KeyCode == Keys.D5)//länkar 5 till 5 knappen på miniräknaren this.button5.PerformClick(); else if (e.KeyCode == Keys.D6)//länkar 6 till 6 knappen på miniräknaren this.button6.PerformClick(); else if (e.KeyCode == Keys.D7)//länkar 7 till 7 knappen på miniräknaren this.button7.PerformClick(); else if (e.KeyCode == Keys.D8)//länkar 8 till 8 knappen på miniräknaren this.button8.PerformClick(); else if (e.KeyCode == Keys.D9)//länkar 9 till 9 knappen på miniräknaren this.button9.PerformClick(); else if (e.KeyCode == Keys.Oemcomma)//länkar oem , till , knappen på miniräknaren this.button11.PerformClick(); else if (e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)// ger error ljud om bokstäver trycks i miniräknaren med tangentbordet. SystemSounds.Hand.Play(); } } }

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem

Skulle gärna hjälpa till men har inte tillgång till nån kompilator just nu. Koden är ganska så grötig att bara läsa rent av.
Försök länka i annat format?

Kanske finns nån med kompilator som kan se felet lite lättare, tappade orken snabbt

MVH NP^

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

http://www.mediafire.com/?mgqa1ximib0wa46duger en zip till projektet tror du?

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem

Har du provat "stegdebuga" dig fram och se vad värden och annat blir?
Kan ju hända att nånstans blir värdet helt galet, kansker räcker med en typecast eller trim.
Känns lite som det är nån datatyp nånstans som blir galet.

Stegdebuga är det ända jag kan föreslå just nu, då hittar du säkert felet direkt.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

har testat, den kommer fram till case "*": result = result * Convert.ToDecimal(label1.Text); break;
och säger att det saknas formatexception

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem
Skrivet av Urbersurfer:

har testat, den kommer fram till case "*": result = result * Convert.ToDecimal(label1.Text); break;
och säger att det saknas formatexception

Har du kolat vad label1.Text innerhåller?
Det är säkert att den inte är i "nummerformat"

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

label1.text har skrivet 900*90 -. detta efter att jag gjort detta : 900 * 10% sedan klickar jag på -. då crashar den.

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk

uppgiften orginelt sätt var att skriva en miniräknare med + - * / och +-. så jag har nått alla målen för uppgiften, men valde ju att gå lite överkurs så ja lade till %. så är inte inte direkt jätteviktigt^^

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem
Skrivet av Urbersurfer:

label1.text har skrivet 900*90 -. detta efter att jag gjort detta : 900 * 10% sedan klickar jag på -. då crashar den.

Testa använda
Convert.ToDecimal(900*90-);
sen använda Convert.ToDecimal(81000);

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

hur menar du nu?

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk

om jag skriver 900 * 90 och sedan minus så crashar ju inte programemt?

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem
Skrivet av Urbersurfer:

hur menar du nu?

Nu är jag inte riktigt expert på just Convert.ToDecimal,
men ditt värde är 900*90- och jag antar att det inte går att mata in i Conver.ToDecimal.

Utan du får räkna ut resultatet och skicka resultatet till Convert.

Vad jag menade var att du skulle kolla vad som sker mellan de olika alternativen i tex. nytt projekt, genom hårdkodning.
Skicka in 900*90- sen samma sak med 81000, crashar det eller inte?
Borde få samma resultat, dvs 900*90- är inte i "nummer format"

Hoppas du förstår vad jag menar.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

jag förstår vad du menar, dock så som jag förståt convert så ska det funka. för om jag skippar att klicka på procent knappen så crashar den inte vid någon uträknings metod som -. så det är bara % som convert inte verkar kunna använda.

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk

och tecken ska inte vara problem då jag konverterar dem till nummer format.

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem
Skrivet av Urbersurfer:

och tecken ska inte vara problem då jag konverterar dem till nummer format.

Vad fick du för resultat från dom två olika exemplen då?
Testa även nåt som fungerar, vad du får ut från Convert.. metoden alltså

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk

skippade %, fick högsta betyg tack ändå

Visa signatur

CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green

Permalänk
Medlem
Skrivet av Urbersurfer:

skippade %, fick högsta betyg tack ändå

Jag testade när jag kom hem från jobbet igår, och fick samma fel, det var som jag sa.

Anyway bra jobbat, lycka till framöver och tveka inte att fråga om det är nåt annat som strular.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770