C#实现简易计算器功能(2)(窗体应用)

C#实现简易计算器功能(2)(窗体应用)

前言

在上一篇教程C#实现简易计算器功能(1)中,我们使用控制台应用程序的方式实现了简易的计算器功能。但是,控制台程序的界面比较简陋,不够直观、美观。在这篇教程中,我们将使用Windows窗体应用程序的方式来实现简易计算器功能,界面将更加直观、友好。

步骤

1. 新建Windows窗体应用程序工程

打开Visual Studio,在主界面选择“创建新项目” -> “Windows桌面” -> “Windows窗体应用程序”,填写项目名称和路径,点击确定即可。

2. 构建用户界面

打开 Form1.cs 文件,我们可以看到自动生成的窗体界面。首先,我们需要设计计算器的用户界面。

本示例中的计算器界面由以下几个控件组成:

  • 一个用于显示输入的文本框(textBox1)
  • 数字键 0 到 9 的按钮(button0 到 button9)
  • 加、减、乘、除运算符的按钮(buttonPlus,buttonMinus,buttonMul,buttonDiv)
  • 小数点和清除键的按钮(buttonPoint和buttonClear)
  • 等于号的按钮(buttonEqual)

在工具箱中,可以通过拖拽的方式将每个按钮控件添加到窗体中,然后设定对应的控件属性。

示例代码:

private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button0;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button buttonPlus;
private System.Windows.Forms.Button buttonMinus;
private System.Windows.Forms.Button buttonMul;
private System.Windows.Forms.Button buttonDiv;
private System.Windows.Forms.Button buttonEqual;
private System.Windows.Forms.Button buttonClear;
private System.Windows.Forms.Button buttonPoint;

private void InitializeComponent()
{
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.button0 = new System.Windows.Forms.Button();
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.button3 = new System.Windows.Forms.Button();
    this.button4 = new System.Windows.Forms.Button();
    this.button5 = new System.Windows.Forms.Button();
    this.button6 = new System.Windows.Forms.Button();
    this.button7 = new System.Windows.Forms.Button();
    this.button8 = new System.Windows.Forms.Button();
    this.button9 = new System.Windows.Forms.Button();
    this.buttonPlus = new System.Windows.Forms.Button();
    this.buttonMinus = new System.Windows.Forms.Button();
    this.buttonMul = new System.Windows.Forms.Button();
    this.buttonDiv = new System.Windows.Forms.Button();
    this.buttonEqual = new System.Windows.Forms.Button();
    this.buttonClear = new System.Windows.Forms.Button();
    this.buttonPoint = new System.Windows.Forms.Button();
    // textBox1
    this.textBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    this.textBox1.Location = new System.Drawing.Point(12, 12);
    this.textBox1.Name = "textBox1";
    this.textBox1.ReadOnly = true;
    this.textBox1.Size = new System.Drawing.Size(291, 29);
    this.textBox1.TabIndex = 0;
    // button0
    this.button0.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    this.button0.Location = new System.Drawing.Point(12, 175);
    this.button0.Name = "button0";
    this.button0.Size = new System.Drawing.Size(64, 64);
    this.button0.TabIndex = 1;
    this.button0.Text = "0";
    this.button0.UseVisualStyleBackColor = true;
    // button1
    this.button1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    this.button1.Location = new System.Drawing.Point(12, 105);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(64, 64);
    this.button1.TabIndex = 2;
    this.button1.Text = "1";
    this.button1.UseVisualStyleBackColor = true;
    // 其他按钮略
    // Form1
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(315, 372);
    this.Controls.Add(this.buttonPoint);
    this.Controls.Add(this.buttonClear);
    this.Controls.Add(this.buttonEqual);
    this.Controls.Add(this.buttonDiv);
    this.Controls.Add(this.buttonMul);
    this.Controls.Add(this.buttonMinus);
    this.Controls.Add(this.buttonPlus);
    this.Controls.Add(this.button9);
    this.Controls.Add(this.button8);
    this.Controls.Add(this.button7);
    this.Controls.Add(this.button6);
    this.Controls.Add(this.button5);
    this.Controls.Add(this.button4);
    this.Controls.Add(this.button3);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.button0);
    this.Controls.Add(this.textBox1);
    this.Name = "Form1";
    this.Text = "简易计算器";
    this.ResumeLayout(false);
    this.PerformLayout();
}

3. 添加计算器逻辑代码

添加按钮的单击事件,编写逻辑代码实现计算器的功能。由于计算器的实现逻辑较为复杂,这里只给出示例代码,详细解释请参考上一篇教程。

示例代码:

public partial class Form1 : Form
{
    private string operation = "";
    private double num1 = 0.0, num2 = 0.0;
    private bool flag = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void SetValue(string s)
    {
        if (flag == true)
        {
            textBox1.Text = "0";
            flag = false;
        }
        if (textBox1.Text == "0") textBox1.Text = "";
        textBox1.Text += s;
    }

    private void button0_Click(object sender, EventArgs e)
    {
        SetValue("0");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        SetValue("1");
    }

    // 其他数字按钮略

    private void buttonPlus_Click(object sender, EventArgs e)
    {
        operation = "+";
        num1 = Convert.ToDouble(textBox1.Text.Trim());
        textBox1.Text = "0";
    }

    private void buttonMinus_Click(object sender, EventArgs e)
    {
        operation = "-";
        num1 = Convert.ToDouble(textBox1.Text.Trim());
        textBox1.Text = "0";
    }

    // 其他运算符按钮略

    private void buttonEqual_Click(object sender, EventArgs e)
    {
        if (operation == "+")
        {
            num2 = Convert.ToDouble(textBox1.Text.Trim());
            textBox1.Text = Convert.ToString(num1 + num2);
        }
        else if (operation == "-")
        {
            num2 = Convert.ToDouble(textBox1.Text.Trim());
            textBox1.Text = Convert.ToString(num1 - num2);
        }
        // 其他运算符逻辑略
        flag = true;
    }

    private void buttonClear_Click(object sender, EventArgs e)
    {
        textBox1.Text = "0";
        num1 = num2 = 0.0;
        flag = false;
    }

    private void buttonPoint_Click(object sender, EventArgs e)
    {
        if (flag == true)
        {
            textBox1.Text = "0";
            flag = false;
        }
        if (textBox1.Text.IndexOf('.') == -1)
        {
            textBox1.Text += ".";
        }
    }
}

编译并运行程序,可以看到一个简易的计算器界面,可以进行加、减、乘、除的计算。其中,点击清除键(C)可以清空输入和计算结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简易计算器功能(2)(窗体应用) - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • C# HttpClient Post参数同时上传文件的实现

    我将为您详细讲解“C# HttpClient Post参数同时上传文件的实现”的完整攻略。 创建HttpClient对象 首先,我们需要创建一个HttpClient对象来进行HTTP请求和响应。可以使用以下代码创建HttpClient对象: HttpClient client = new HttpClient(); 添加要上传的文件 接下来,我们需要添加要上…

    C# 2023年5月31日
    00
  • C#事件中关于sender的用法解读

    当我们定义一个事件时,必须要在事件的定义中指定sender参数。sender参数表示事件的触发者,用于在事件处理中判断事件的来源。 在事件的处理中,可以利用sender参数来获取事件的触发者,进行相应的处理。 下面我们通过代码示例来详细讲解C#事件中关于sender的用法。 示例1 public class MyEventArgs : EventArgs {…

    C# 2023年5月31日
    00
  • C#异步编程由浅入深(三)之详解Awaiter

    C#异步编程由浅入深(三)之详解Awaiter 在C#异步编程中,awai和awaiter是非常重要的概念。Awaiter是实现自定义异步操作必须实现的一个组件,相当于C#异步编程中的“接口”,而await则代表“等待”。本篇文章就来详细讲解Awaiter的用法。 Awaiter的概念 首先我们需要了解Awaiter的概念。Awaiter是异步操作的“接口”…

    C# 2023年6月6日
    00
  • 详解C#中委托的概念与使用

    详解C#中委托的概念与使用 委托的概念 委托是一种类型,它可以用于封装方法、函数或Lambda表达式,并将其作为参数传递给其他方法。委托可以理解为是一个函数指针,它指向一个特定的方法。 委托是一个类,定义了一个方法的签名,可以指向任何函数,只要这个函数的参数列表和返回值类型与该委托的签名相同。C#中的委托必须先声明后使用,声明委托格式如下: delegate…

    C# 2023年6月7日
    00
  • Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现

    Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现 AspNetCoreRateLimit是一个基于ASP.NET Core的限流控制库,可以帮助我们在ASP.NET Core应用程序中实现限流控制。在本攻略中,我们将介绍如何使用AspNetCoreRateLimit来实现限流控制,并提供两个示例说明。 准备工作 在使用Asp…

    C# 2023年5月16日
    00
  • .NET中的async和await关键字使用及Task异步调用实例

    关于“.NET中的async和await关键字使用及Task异步调用实例”的攻略,我准备用以下这个顺序来展开: 异步编程和它的重要性 .NET中的异步编程和Task机制 async和await的使用 Task异步调用的实例 1. 异步编程和它的重要性 异步编程是一种能够提高程序性能,提升用户体验的编程方式,因为它能够在不阻塞程序运行的情况下进行其他操作。异步…

    C# 2023年5月15日
    00
  • C#实现判断操作系统是否为Win8以上版本

    要实现判断操作系统是否为Windows 8及以上版本,可以用C#语言编写以下代码: using System; using System.Runtime.InteropServices; class OperatingSystemUtils { [DllImport("kernel32.dll")] static extern bool …

    C# 2023年6月2日
    00
  • C#调用SQLite的方法实例分析

    C#调用SQLite的方法实例分析 概述 本文将详细讲解C#调用SQLite的方法。SQLite是一种轻量级数据库,它可以存储和管理数据,适用于小型的应用程序。 在本文中,我们将使用SQLite的.NET依赖包来实现C#中对SQLite的调用。 步骤 第一步:安装SQLite的.NET依赖包 在Visual Studio 中,右键点击项目-> “管理N…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部