Kad se u tvoj kalkulator unose decimalni brojevi, unose se u američkom formatu, a rezulat je u europskom formatu ako su postavke control panela na HR.
Pogledaj malo kako je to sređeno u windows kalkulatoru, ovisno o postavkama u control panelu, a o tom sam pisao u onom postu o kulturama.
Tu ne bi smjelo biti dvojbi, po postavkama control panela treba biti i input i optput. Aplikacija se piše za korisnika, a ne programera.
Ovako sam ja riješio hot keyse, pa pogledaj malo
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (Control.ModifierKeys != Keys.Shift)
{
if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
SetTextFromKeyBoard(e.KeyValue);
}
}
if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
{
SetTextFromKeyBoard(e.KeyValue);
}
if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete)
{
SetTextFromKeyBoard(e.KeyValue);
}
if (e.KeyCode == Keys.Enter)
{
SetTextFromKeyBoard(e.KeyValue);
}
if (e.KeyCode == Keys.G || e.KeyCode == Keys.L)
{
SetTextFromKeyBoard(e.KeyValue);
}
if (e.KeyCode == Keys.X)
{
SetTextFromKeyBoard(e.KeyValue);
}
}
Dakle, kad stisnem točno ove određene tipke, poziva mi ovaj metod, za ostale tipke ne radi ništa.
private void SetTextFromKeyBoard(int keyValue)
{
textBox1.Select();
switch (keyValue)
{
case 8:
ClearOneCharachter();
break;
case 13:
AddNumbers();
break;
case 46:
DeleteLine();
break;
case 48:
NamjestiTekst("0");
break;
case 49:
NamjestiTekst("1");
break;
case 50:
NamjestiTekst("2");
break;
case 51:
NamjestiTekst("3");
break;
case 52:
NamjestiTekst("4");
break;
case 53:
NamjestiTekst("5");
break;
case 54:
NamjestiTekst("6");
break;
case 55:
NamjestiTekst("7");
break;
case 56:
NamjestiTekst("8");
break;
case 57:
NamjestiTekst("9");
break;
case 71:
GCD();
break;
case 76:
LCM();
break;
case 88:
ClearAll();
break;
case 96:
NamjestiTekst("0");
break;
case 97:
NamjestiTekst("1");
break;
case 98:
NamjestiTekst("2");
break;
case 99:
NamjestiTekst("3");
break;
case 100:
NamjestiTekst("4");
break;
case 101:
NamjestiTekst("5");
break;
case 102:
NamjestiTekst("6");
break;
case 103:
NamjestiTekst("7");
break;
case 104:
NamjestiTekst("8");
break;
case 105:
NamjestiTekst("9");
break;
}
}
A pozivani metod mi je ovaj:
void NamjestiTekst(string unos)
{
if (kontrolnaVarijabla)
{
if (unos.CompareTo("0") != 0)
{
textBox1.Text = unos;
textBox2.Text = unos;
textBox4.Text = "";
kontrolnaVarijabla = false;
kontrolnaVarijabla1 = true;
}
}
else
{
textBox1.Text += unos;
textBox2.Text += unos;
}
}
Na ovaj način dobiješ to da nema broja 05 kad ukucaš 05 nego 5, a tako možeš riješiti i da ne ukuca aritmetički operator ako ga prvog stisneš, što vidim da daje čudne rezultate.