how to bind keyboard numbers with a calculator app that i created?

Viewed 74

Hi I have created a window calculator and it is working fine however, i want to be able to use my keyboard numbers as well for my calculator app . what do i do? here is my code

public partial class Form1 : Form
{
    Double resultValue = 0;
    String operationPerformed = "";
    bool isOperationPerformed = false;
    public Form1()
    {
        InitializeComponent();
    }

    private void button_click(object sender, EventArgs e)
    {
        if ((textBox_Result.Text == "0") || (isOperationPerformed))
            textBox_Result.Clear();


        isOperationPerformed = false;
        Button button = (Button)sender;

        if (button.Text == ".")
        {
            if (!textBox_Result.Text.Contains("."))
                textBox_Result.Text = textBox_Result.Text + button.Text;
        } else

        textBox_Result.Text = textBox_Result.Text + button.Text;
    }

    private void operator_click(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        if (resultValue != 0)
        {
            EqualsToBtn.PerformClick();
            operationPerformed = button.Text;
            labelCurrentOperation.Text = resultValue + " " + operationPerformed;
            isOperationPerformed = true;
        }else
        {


        operationPerformed = button.Text;
        resultValue = Double.Parse(textBox_Result.Text);
        labelCurrentOperation.Text = resultValue + " " + operationPerformed;
        isOperationPerformed = true;

        }

    }

    private void RefreshBtn_Click(object sender, EventArgs e)
    {
        textBox_Result.Text = "0";
    }

    private void CancelBtn_Click_1(object sender, EventArgs e)
    {
        textBox_Result.Text = "0";
        resultValue = 0;
    }

    private void EqualsToBtn_Click_1(object sender, EventArgs e)
    {
        switch (operationPerformed)
        {
            case "+":
                textBox_Result.Text = (resultValue + Double.Parse(textBox_Result.Text)).ToString();
                break;
            case "-":
                textBox_Result.Text = (resultValue - Double.Parse(textBox_Result.Text)).ToString();
                break;
            case "*":
                textBox_Result.Text = (resultValue * Double.Parse(textBox_Result.Text)).ToString();
                break;
            case "/":
                textBox_Result.Text = (resultValue / Double.Parse(textBox_Result.Text)).ToString();
                break;
        }
        resultValue = Double.Parse(textBox_Result.Text);
        labelCurrentOperation.Text = "";
     }
   }
}  
2 Answers

You can use the processcmdkey

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == ( Keys.Numpad0 | Keys.Numpad0)) { // just an example, handle the rest as you need
            doSomething();
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

You can achieve it by subscribing to KeyDown event.

Fisrt, need to set KeyPreview to true.

public Form1()
{
    InitializeComponent();
    KeyPreview = true;
}

Then use swicth to judge which key pressed. Keys Enum

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.NumPad0:
        case Keys.D0:
            // Zero
            buttonnum0.PerformClick(); // simulate pressing buttonnum0
            break;
        case Keys.NumPad1:
        case Keys.D1:
            // One
            buttonnum1.PerformClick();
            break;
        // ... etc
        case Keys.Oemplus:
        case Keys.Add:
            // Plus
            buttonplus.PerformClick();
            break;
        default:               
            return;
    }
    e.Handled = true;
}
Related