Search Forum
(57415 Postings)
Search Site/Articles

Archived Articles
712 Articles

C# Books
C# Consultants
What Is C#?
Download Compiler
Code Archive
Archived Articles
Advertise
Contribute
C# Jobs
Beginners Tutorial
C# Contractors
C# Consulting
Links
C# Manual
Contact Us
Legal

GoDiagram for .NET from Northwoods Software www.nwoods.com


              
Printable Version

C# Calculator Using Delegation
By Raheel Kamal

Here is the source code for a C# based calculator that uses delegation.

using System;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;

namespace TestingDOTNET
{
  /// 
  /// Summary description for Form1.
  /// 
  public class Form1 : Form
  {
    private Button button;
    private TextBox screenbox;
    private String buttonLabel;
    private Label label;
    private double PreviousNumber;
    private double NextNumber;
    private double Result;
    private bool Nextflg;
    private bool Prevflg;
    int OP;
    /// 
    /// Required designer variable.
    /// 
    public Form1()
    {
      InitializeComponent();
    }
      
    [STAThread]
    static void Main() 
    {
      Form1 form1=new Form1();
      Application.Run(form1);
    }

    private void InitializeComponent()
    {
      // 
      // Form1
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(160, 170);
      this.Name = "Form1";
      this.Text = "Sharp 208";
      PreviousNumber=0;
      NextNumber=0;
      Prevflg = false;
      Nextflg = false;
      
      for (int X=0;X<150;X+=40)
        for(int Y=50;Y<150;Y+=30)
        {
          if (Y<150 && X==0) 
          {
            if (Y==50)
              CreateNumericPad(X,Y,System.Convert.ToString(3));
            else if (Y==80)
              CreateNumericPad(X,Y,System.Convert.ToString(2));
            else if (Y==110)
              CreateNumericPad(X,Y,System.Convert.ToString(1));
            else if (Y==140)
              CreateNumericPad(X,Y,System.Convert.ToString(0));
          }
          else if(Y<150 && X==40)
          {
            if (Y==50)
              CreateNumericPad(X,Y,System.Convert.ToString(7));
            else if (Y==80)
              CreateNumericPad(X,Y,System.Convert.ToString(6));
            else if (Y==110)
              CreateNumericPad(X,Y,System.Convert.ToString(5));
            else if (Y==140)
              CreateNumericPad(X,Y,System.Convert.ToString(4));
            
          }
          else if(Y<150 && X==80)
          {
            if (Y==50)
              CreateNumericPad(X,Y,System.Convert.ToString("+"));
            else if (Y==80)
              CreateNumericPad(X,Y,System.Convert.ToString("-"));
            else if (Y==110)
              CreateNumericPad(X,Y,System.Convert.ToString(9));
            else if (Y==140)
              CreateNumericPad(X,Y,System.Convert.ToString(8));
            
          }
          else if(Y<150 && X==120)
          {
            if (Y==50)
              CreateNumericPad(X,Y,System.Convert.ToString("/"));
            else if (Y==80)
              CreateNumericPad(X,Y,System.Convert.ToString("*"));
            else if (Y==110)
              CreateNumericPad(X,Y,System.Convert.ToString("ON"));
            else if (Y==140)
              CreateNumericPad(X,Y,System.Convert.ToString("="));
            
          }
        }
      CreateScreen(150,50);  
    }
    
    public void CreateNumericPad(int X,int Y,String buttonLabel)
    {
      button = new System.Windows.Forms.Button();
      button.Location=new System.Drawing.Point(X,Y);
      button.Size = new System.Drawing.Size(40,30);
      button.Text = buttonLabel;
      Controls.Add(button);
      button.Click += new EventHandler(this.button_Clicked);
    }
    
    public void CreateScreen(int X,int Y)
    {
      label = new System.Windows.Forms.Label();
      screenbox = new System.Windows.Forms.TextBox();
      
      screenbox.Location = new System.Drawing.Point(0,20);
      screenbox.Height = Y;
      screenbox.Width = X;
      screenbox.MaxLength = 18;
      Controls.Add(screenbox);

      label.Location = new System.Drawing.Point(0,5);
      label.Size = new System.Drawing.Size(100,115);
      label.Text = "8 Digits Calculator";
      Controls.Add(label);
                
    }

    private void button_Clicked(Object sender,EventArgs e)
    {
      //this.buttonLabel = "BB";
      screenbox.TextAlign = HorizontalAlignment.Right;

      if (sender is Button) 
        CheckPosition((Button)sender);
      
    }
    
    private void CheckPosition(Button button)
    {
      
      if (button.Location.Y<150 && button.Location.X==0) 
      {
        if (button.Location.Y==50)
          ShowValueOnScreen(System.Convert.ToString(3));
        else if(button.Location.Y==80)
          ShowValueOnScreen(System.Convert.ToString(2));
        else if(button.Location.Y==110)
          ShowValueOnScreen(System.Convert.ToString(1));
        else if(button.Location.Y==140)
          ShowValueOnScreen(System.Convert.ToString(0));
      }
      else if(button.Location.Y<150 && button.Location.X==40)
      {
        if (button.Location.Y==50)
          ShowValueOnScreen(System.Convert.ToString(7));
        else if(button.Location.Y==80)
          ShowValueOnScreen(System.Convert.ToString(6));
        else if(button.Location.Y==110)
          ShowValueOnScreen(System.Convert.ToString(5));
        else if(button.Location.Y==140)
          ShowValueOnScreen(System.Convert.ToString(4));
      }
      else if(button.Location.Y<150 && button.Location.X==80)
      {
        if (button.Location.Y==50)
          ShowValueOnScreen("+");
        else if(button.Location.Y==80)
          ShowValueOnScreen("-");
        else if(button.Location.Y==110)
          ShowValueOnScreen(System.Convert.ToString(9));
        else if(button.Location.Y==140)
          ShowValueOnScreen(System.Convert.ToString(8));
      }
      else if(button.Location.Y<150 && button.Location.X==120)
      {
        if (button.Location.Y==50)
          ShowValueOnScreen("/");
        else if(button.Location.Y==80)
          ShowValueOnScreen("*");
        else if(button.Location.Y==110)
          ShowValueOnScreen("ON");
        else if(button.Location.Y==140)
          ShowValueOnScreen("=");
      }

    }
    
    private void ShowValueOnScreen(String screencontent)
    {
      if(screencontent != "/" && screencontent != "*" && screencontent != "+" && screencontent != "-" && screencontent != "=" && screencontent != "ON") 
      {
        screenbox.AppendText(screencontent);        
      }
      else
      {
        CheckOperator(screencontent);
      }
    }
    
    private void CheckOperator(String screencontent)
    {
      
      if(screencontent == "/" || OP==1) 
      {
        OP=1;
        if (Prevflg!=true)
        {
          Prevflg=true;
          PreviousNumber = System.Convert.ToDouble(screenbox.Text);
          screenbox.Clear();
        }//Prevflg
        else if(Nextflg!=true)
        {
          if(screencontent=="=")
          {
            Nextflg = true;
            NextNumber = System.Convert.ToDouble(screenbox.Text);
            Prevflg=false;
          }//=
        }//Nextflg
        
      }//"/"
      else if(screencontent == "*" || OP==2)
      {
        OP=2;
        if (Prevflg!=true)
        {
          Prevflg=true;
          PreviousNumber = System.Convert.ToDouble(screenbox.Text);
          screenbox.Clear();
        }//Prevflg
        else if(Nextflg!=true)
        {
          if(screencontent=="=")
          {
            Nextflg = true;
            NextNumber = System.Convert.ToDouble(screenbox.Text);
            Prevflg=false;
          }//=
        }//Nextflg
      }//*
      else if(screencontent == "+" || OP==3)
      {
        OP=3;
        if (Prevflg!=true)
        {
          Prevflg=true;
          PreviousNumber = System.Convert.ToDouble(screenbox.Text);
          screenbox.Clear();
        }//PrevFlag
        else if(Nextflg!=true)
        {
          if(screencontent=="=")
          {
            Nextflg = true;
            NextNumber = System.Convert.ToDouble(screenbox.Text);
            Prevflg=false;
          }//=
        }//Nextflg
      }//+
      else if(screencontent == "-" || OP==4)
      {
        OP=4;
        if (Prevflg!=true)
        {
          Prevflg=true;
          PreviousNumber = System.Convert.ToDouble(screenbox.Text);
          screenbox.Clear();
        }//Prevflg
        else if(Nextflg!=true)
        {
          if(screencontent=="=")
          {
            Nextflg = true;
            NextNumber = System.Convert.ToDouble(screenbox.Text);
            Prevflg=false;
          }//=
        }//NextFlg
      }//-
      else if(screencontent == "ON")
      {
        screenbox.Clear();
        //ShowValueOnScreen(System.Convert.ToString(0));
      }
      if(screencontent=="=")
      {
        if(OP==1)  
        {  
          if (NextNumber > 0.0)
          {
            Result = PreviousNumber / NextNumber;
            screenbox.Clear();
            ShowValueOnScreen(System.Convert.ToString(Result));
            Nextflg=false;
            
            Result=0;
            PreviousNumber=0;
            NextNumber=0;
            OP=0;
          }
        }//OP1
        if(OP==2)
        {
          Result = PreviousNumber * NextNumber;
          screenbox.Clear();
          ShowValueOnScreen(System.Convert.ToString(Result));
          Nextflg=false;
            
          Result=0;
          PreviousNumber=0;
          NextNumber=0;
          OP=0;
        }//OP2
        if(OP==3)
        {
          Result = PreviousNumber + NextNumber;
          screenbox.Clear();
          ShowValueOnScreen(System.Convert.ToString(Result));
          Nextflg=false;
            
          Result=0;
          PreviousNumber=0;
          NextNumber=0;
          OP=0;
        }//OP3
        if(OP==4)
        {
          Result = PreviousNumber - NextNumber;
          screenbox.Clear();
          ShowValueOnScreen(System.Convert.ToString(Result));
          Nextflg=false;
            
          Result=0;
          PreviousNumber=0;
          NextNumber=0;
          OP=0;
        }//OP4
      }//ScreenContent
    }
  }
}