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();
}
}
}
CPU: i7-3770k | Chassi: Fractal Design Arc | PSU Corsair 620W | GPU: GTX670 | RAM: 16GB DDR3 | Systemdisk: Force Series 3 120gb | Lagringsdisk: WD 2TB Green