Calculadora C#

Boa noite

Sei que a categoria é C e C++, mas preciso de ajuda em C#,
segue o código da minha calculadora, estou com as seguintes dúvidas:

  • Preciso ativar os números e o enter do teclado, sei que preciso colocar esse comando pra todos os botões:
    "case Keys.NumPadnumero:
    btnNumero.PerformClick();
    break;"
    Mas em qual parte eu add esse código?
  • A virgula só pode aparecer uma vez, mesmo clicando várias
  • Não pode dividir por zero, aparecendo a seguinte mensagem se tentado “Impossível divisão por zero”

Se alguém puder me ajudar.

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 WFA_Calculadora
{
public partial class frmCalculadora : Form
{
public frmCalculadora()
{
InitializeComponent();
}

    Int32 w;
    public string n1 = "", n2 = "";
    

    class Calc
    {
        public string Op = "";

        public string Igual(string strN1, string strN2)
        {
            double n1 = Convert.ToDouble(strN1);
            double n2 = Convert.ToDouble(strN2);
            double resul = 0;

            switch (Op)
            {
                case "/":
                    resul = n1 / n2;
                    break;
                case "*":
                    resul = n1 * n2;
                    break;
                case "-":
                    resul = n1 - n2;
                    break;
                case "+":
                    resul = n1 + n2;
                    break;
                case "mod":
                    resul = n1 % n2;
                    break;
                case "^":
                    resul = Math.Pow(n1, n2);
                    break;

            }
            return Convert.ToString(resul);
           
        }
    }
    Calc c = new Calc();


    private void btn7_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "7";
        label1.Focus();
    }

    private void btn8_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "8";
        label1.Focus();
    }

    private void btn9_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "9";
        label1.Focus();
    }

    private void btn4_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "4";
        label1.Focus();
    }

    private void btn5_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "5";
        label1.Focus();
    }

    private void btn6_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "6";
        label1.Focus();
    }

    private void btn1_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "1";
        label1.Focus();
    }

    private void btn2_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "2";
        label1.Focus();
    }

    private void btn3_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "3";
        label1.Focus();
    }

    private void btn0_Click(object sender, EventArgs e)
    {
        txtVisor.Text += "0";
        label1.Focus();
    }

    private void btnSoma_Click(object sender, EventArgs e)
    {
        n1 = txtVisor.Text;
        c.Op = "+";
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnMod_Click(object sender, EventArgs e)
    {
        n1 = txtVisor.Text;
        c.Op = "mod";
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnIgual_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            n2 = txtVisor.Text;
            txtVisor.Text = c.Igual(n1, n2);
            label1.Focus();
        }
        catch
        {
            return;
        }
    }

    private void btnDiv_Click(object sender, EventArgs e)
    {
        n1 = txtVisor.Text;
        c.Op = "/";
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnMult_Click(object sender, EventArgs e)
    {
        n1 = txtVisor.Text;
        c.Op = "*";
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnSub_Click(object sender, EventArgs e)
    {
        n1 = txtVisor.Text;
        c.Op = "-";
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnPot_Click(object sender, EventArgs e)
    {

        n1 = txtVisor.Text;
        c.Op = "^";
        txtVisor.Clear();
        label1.Focus();
       
    }

    private void btnRaiz_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            double r = Convert.ToDouble(txtVisor.Text);
            txtVisor.Text = Convert.ToString(Math.Sqrt(r));
            
        }
        catch
        {
            return;
        }
    }

    private void btnPorc_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            double p1 = Convert.ToDouble(n1);
            double p2 = Convert.ToDouble(txtVisor.Text);

            txtVisor.Text = Convert.ToString(p1 * p2 / 100);
            
        }
        catch
        {
            return;
        }
    }

    private void btnMR_Click(object sender, EventArgs e)
    {
        txtVisor.Text = Convert.ToString(w);
        label1.Focus();
        
    }

    private void btnMS_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            w = Convert.ToInt32(txtVisor.Text);
            txtVisor.Clear();
            
        }
        catch
        {
            return;
        }
    }

    private void btnMSoma_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            Int32 wsoma = Convert.ToInt32(txtVisor.Text);
            w = w + wsoma;
            
        }
        catch
        {
            return;
        }
    }

    private void btnMSub_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            Int32 wsub = Convert.ToInt32(txtVisor.Text);
            w = w - wsub;
            
        }
        catch
        {
            return;
        }
    }

    private void btnC_Click(object sender, EventArgs e)
    {
        txtVisor.Clear();
        n1 = "";
        c.Op = "";
        label1.Focus();
    }

    private void btnMC_Click(object sender, EventArgs e)
    {
        w = 0;
        label1.Focus();
    }

    private void btnCE_Click(object sender, EventArgs e)
    {
        
        txtVisor.Clear();
        label1.Focus();
    }

    private void btnFat_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            double n = Convert.ToDouble(txtVisor.Text);
            double f = n;
            for (f = n - 1; f >= 1; f--)
            {
                n = f * n;

            }
            txtVisor.Text = Convert.ToString(n);
            
        }
        catch
        {
            return;
        }
    }

    private void frmCalculadora_Load(object sender, EventArgs e)
    {

    }

    private void btnLog_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            double resul = double.Parse(txtVisor.Text);
            resul = Math.Log10(resul);
            txtVisor.Text = resul.ToString();
        }
        catch
        {
            return;
        }
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        int x = txtVisor.Text.Length - 1;
        if (x >= 0)
        {
            txtVisor.Text = txtVisor.Text.Substring(0, x);
        }
    }

    private void btnMaisMenos_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            double r = Convert.ToDouble(txtVisor.Text);
            txtVisor.Text = Convert.ToString(r * -1);
        }
        catch
        {
            return;
        }
    }

    private void btnVirgula_Click(object sender, EventArgs e)
    {
        txtVisor.Text += ",";
    }

    private void btnPi_Click(object sender, EventArgs e)
    {
        label1.Focus();
        try
        {
            txtVisor.Text += Math.PI;
        }
        catch
        {
            return;
        }
    }

    private void button4_Click(object sender, EventArgs e)
    {
        double sin = Convert.ToDouble(txtVisor.Text);
        sin = Math.Sin(sin);
        txtVisor.Text = sin.ToString();
    }
}

}