Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Kalkulačka C# - řešení problému

Zdravím, chtěl bych se zeptat nějakého znalého na jeden problém s kalkulačkou v C#. Máme mít na příští hodinu programování vytvořenou kalkulačku. Tu již mám, avšak bych potřeboval vyřešit jeden problém. Ten se týká výpočtu. Přesněji, aby po výpočtu (po kliknutí na tlačítko = ) se vypnuly všechny tlačítka kromě buttonu C. Který by následně vymazal vypočtený příklad a opět zapnul ostatní tlačítka. Vím, že je to stupidně napsané, ale snad se v tom vyznáte. Přihazuji kód programu. V programování se moc nevyznám :(.

{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int clear = 1; decimal result; string op;
decimal eval(string op)
{
clear = 1;
try
{
switch (op)
{
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(); }
catch (System.DivideByZeroException) { label2.Text = ""; label2.Text = "Nelze dělit nulou!"; clear = 2; SystemSounds.Asterisk.Play(); }
return result;
}
int Clear(int cl)
{
switch (cl)
{
case 1:
{
label1.Text = "";
}
break;
case 2:
{
label1.Text = ""; label2.Text = ""; op = "";
}
break;
case 3:
{
label1.Text = ""; label2.Text = label2.Text.Remove(label2.Text.IndexOf('r'));
}
break;
case 4:
{
label1.Text = ""; label2.Text = label2.Text.Remove(label2.Text.IndexOf('s'));
}
break;
case 5:
{
label1.Text = ""; label2.Text = label2.Text.Remove(label2.Text.LastIndexOf(' ') + 1);
}
break;
}
return 0;
}

private void button2_Click(object sender, EventArgs e)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "0";
else SystemSounds.Beep.Play();
}

private void button5_Click(object sender, EventArgs e)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "1";
else SystemSounds.Beep.Play();
}

Předmět Autor Datum
Pokračování: private void button4_Click(object sender, EventArgs e) { clear = Clear(clear); if (labe…
CafeMan 26.01.2014 16:55
CafeMan
A ještě jeden: private void button16_Click(object sender, EventArgs e) { if (clear == 3 || clear ==…
CafeMan 26.01.2014 16:55
CafeMan
Neustále se opakující kód. Slyšel jsi někdy o metodách?
Wikan 26.01.2014 17:00
Wikan
Slyšel, předchozí jednoduší kalkulačku mám v metodách. Teď jsem zkoušel tuhle techniku :D.
CafeMan 26.01.2014 17:11
CafeMan
Proč zkoušet udělat to špatně?
Wikan 26.01.2014 17:15
Wikan
Takzvany "spaghety code" je cire zlo. Tady se tim jeste treba nakonec nejak proberes, ale jakmile bu… poslední
gilhad 26.01.2014 17:30
gilhad
Tlačítko vypneš nastavením Enabled na false. http://msdn.microsoft.com/en-us/library/system.win dows…
Wikan 26.01.2014 16:59
Wikan
Díky,věděl jsem, že to mám udělat přes tohle, ale nevěděl jsem jak. Holt jsem trotl :D. Už funguje :…
CafeMan 26.01.2014 17:10
CafeMan

Pokračování:
private void button4_Click(object sender, EventArgs e)
{
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)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "3";
else SystemSounds.Beep.Play();
}

private void button8_Click(object sender, EventArgs e)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "4";
else SystemSounds.Beep.Play();
}

private void button7_Click(object sender, EventArgs e)
{
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)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "6";
else SystemSounds.Beep.Play();
}

private void button1_Click(object sender, EventArgs e)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "7";
else SystemSounds.Beep.Play();
}

private void button10_Click(object sender, EventArgs e)
{
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)
{
clear = Clear(clear);
if (label1.Text.Length < 28)
label1.Text = label1.Text + "9";
else SystemSounds.Beep.Play();
}

private void button13_Click(object sender, EventArgs e)
{
if (label1.Text.Contains(','))
{
SystemSounds.Beep.Play();
}
else label1.Text = label1.Text + ",";
}

private void button11_Click(object sender, EventArgs e)
{
if (clear == 3 || clear == 4 || clear == 5)
label2.Text = label2.Text + " + ";
else label2.Text = label2.Text + label1.Text + " + ";
label1.Text = eval(op).ToString();
op = "+";
}

private void button14_Click(object sender, EventArgs e)
{
if (clear == 3 || clear == 4 || clear == 5)
label2.Text = label2.Text + " - ";
else label2.Text = label2.Text + label1.Text + " - ";
label1.Text = eval(op).ToString();
op = "-";
}

private void button15_Click(object sender, EventArgs e)
{
if (clear == 3 || clear == 4 || clear == 5)
label2.Text = label2.Text + " * ";
else label2.Text = label2.Text + label1.Text + " * ";
label1.Text = eval(op).ToString();
op = "*";
}

A ještě jeden:

private void button16_Click(object sender, EventArgs e)
{
if (clear == 3 || clear == 4 || clear == 5)
label2.Text = label2.Text = " / ";
else label2.Text = label2.Text = label1.Text + " / ";
label1.Text = eval(op).ToString();
op = "/";
}

private void button17_Click(object sender, EventArgs e)
{

if (clear != 3 && clear != 4 && clear != 5)
label2.Text = label2.Text + label1.Text;
label1.Text = eval(op).ToString(); clear = 2;
}

private void button12_Click(object sender, EventArgs e)
{
Clear(2); clear = 1; label1.Text = "0"; result = 0;
[/code]

Takzvany "spaghety code" je cire zlo. Tady se tim jeste treba nakonec nejak proberes, ale jakmile budes mit jakykoli netrivialni ukol (a trivialni uz jsou davno vyresene), tak timto zpusobem udelas monstrum, ktere sice nebude fungovat spravne, ale zato nepujde opravit a sam se v nem za cas nevyznas. A zcela jiste se ti za cas bude hodit bud ten kod upravit, nebo z nej cast prevzit. A pak se z toho vzteknes a osypes.

Ono to dost pomaha psat ciste a spravne i u malych veci, treba jen na tisic radku, ktere clovek napise a odladi za tyden, natoz pak u neceho vetsiho.

A ze se clovek porad potkava s historii - nektere programky, co jsem psal jeste nez sem dorazily Windows, se dodnes pouzivaji - a ze je to nejakych let :)

Zpět do poradny Odpovědět na původní otázku Nahoru