I have a calculator app in windows form that work very well when I use mouse for doing operation. I added some code and make it to work with keyboard and keypad. All things work well except ENTER Key. When I do an operation and press the ENTER key, it doesn't trigger anything, but the equal key work fine.
I search a lot and used keypress and keydown events, but it doesn't work and my Enter key doesn't stimulate the equal sign.
the complete code is as follow:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calculator
{
public partial class frmCalculator : Form
{
double x, y, z;
string op;
Boolean flag;
public frmCalculator()
{
InitializeComponent();
}
private void btnEqual_Click(object sender, EventArgs e)
{
y = Convert.ToDouble(txtDisplay.Text);
switch(op)
{
case "+":
z = x + y;
break;
case "-":
z = x - y;
break;
case "*":
z = x * y;
break;
case "/":
z = x / y;
break;
}
txtDisplay.Text = z.ToString();
op = null;
}
private void txtDisplay_TextChanged(object sender, EventArgs e)
{
btnPoint.Enabled = !txtDisplay.Text.Contains(".");
btnBackSpace.Enabled = Convert.ToBoolean(txtDisplay.Text.Length);
}
private void btnBackSpace_Click(object sender, EventArgs e)
{
if (txtDisplay.TextLength>0)
txtDisplay.Text = txtDisplay.Text.Substring(0, txtDisplay.Text.Length - 1);
}
private void frmCalculator_Load(object sender, EventArgs e)
{
txtDisplay_TextChanged(null, null);
}
private void frmCalculator_KeyPress(object sender, KeyPressEventArgs e)
{
foreach (Button x in panelNumbers.Controls)
if (x.Text == e.KeyChar.ToString())
{
x.Focus();
x.ForeColor = Color.Red;
}
else
x.ForeColor = Color.Black;
Button temp = new Button();
temp.Text = e.KeyChar.ToString();
if (e.KeyChar >= '0' && e.KeyChar <= '9')
Numbers(temp, null);
else if (e.KeyChar == '+' || e.KeyChar == '-' || e.KeyChar == '*' || e.KeyChar == '/')
Operators(temp, null);
else if (e.KeyChar == '=')
btnEqual_Click(null, null);
else if (e.KeyChar == '.' && txtDisplay.Text.Contains(".") == false)
Numbers(temp, null);
else if (e.KeyChar == '\b')
btnBackSpace_Click(null, null);
}
private void frmCalculator_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
btnEqual_Click(null, null);
}
private void Operators(object sender, EventArgs e)
{
if (op != null)
btnEqual_Click(null, null);
x = Convert.ToDouble(txtDisplay.Text);
op = ((Button)sender).Text;
flag = true;
}
private void Numbers(object sender, EventArgs e)
{
if (flag==true)
{
txtDisplay.Text = "";
flag = false;
}
txtDisplay.Text += ((Button)sender).Text;
}
}
}