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日

相关文章

  • EF Core基础入门教程

    EF Core是一个轻量级、可扩展的ORM框架,提供了一种使用C#代码进行数据库访问和操作的方式。在本篇文章中,我们将介绍EF Core的基础入门教程。 安装EF Core 首先,下载并安装.NET Core SDK。然后,可以使用以下命令安装EF Core: dotnet add package Microsoft.EntityFrameworkCore …

    C# 2023年6月3日
    00
  • C#开发之int与string转化操作

    让我详细讲解一下“C#开发之int与string转化操作”的完整攻略。 1. 将int类型转为string类型 要将int类型转为string类型,我们可以使用ToString()方法,将整数转为字符串,具体示例如下: int num = 123; string str = num.ToString(); Console.WriteLine(str); //…

    C# 2023年6月8日
    00
  • asp.net 身份验证机制实例代码

    ASP.NET身份验证是一种灵活的机制,用于验证用户身份、授权访问和管理会话对象。实现身份验证需要使用ASP.NET提供的一些特定的类和方法,本文将带你通过实例代码学习如何使用ASP.NET身份验证机制。 步骤一:启用ASP.NET身份验证 首先,你需要在Web.config文件中启用ASP.NET身份验证。在标签下添加如下配置: <system.we…

    C# 2023年5月31日
    00
  • C#封装的常用文件操作类实例

    C#封装的常用文件操作类实例 在C#语言中,常见的文件操作有:文件创建、写入、读取、删除、复制、移动等。这些操作都可以封装成类进行更方便的使用。本篇文章将讲解如何封装常用文件操作类,并且提供两个示例进行演示。 文件操作类的封装 C#中的文件操作类主要有File和Directory两个类。其中File类提供了文件的创建、写入、读取、删除等基本操作。Direct…

    C# 2023年5月15日
    00
  • NetCore WebSocket即时通讯示例

    NetCore WebSocket即时通讯示例是一种使用ASP.NET Core SignalR实现WebSocket即时通讯的方法。本文将详细讲解NetCore WebSocket即时通讯示例的实现过程,包括环境搭建、代码实现、示例说明等。 环境搭建 在开始实现NetCore WebSocket即时通讯示例之前,我们需要先搭建好开发环境。具体来说,我们需要…

    C# 2023年5月16日
    00
  • timespan使用方法详解

    TimeSpan使用方法详解 什么是TimeSpan? TimeSpan是.NET Framework中表示时间间隔的一个结构体,它用于表示两个时间点之间的时间间隔,或一段时间的持续时间。 TimeSpan包括天数、小时数、分钟数、秒数和毫秒数,可以使用各种方式构造TimeSpan实例。TimeSpan在.NET平台中被广泛用于处理时间。 在代码中创建Tim…

    C# 2023年6月1日
    00
  • .NET连接数据库以及基本的增删改查操作教程

    针对“.NET连接数据库以及基本的增删改查操作教程”的攻略,我会详细解释和示范以下几个方面: 准备工作:安装数据库,引入相关的库文件 连接数据库:通过连接字符串实现数据库连接 实现增删改查操作:使用SQL语句和相关的类库实现相应的操作 下面参考示例将一一进行详细讲解。 1. 准备工作 首先要确定使用的数据库类型,例如MSSQL、MySQL等。在此我们以MS …

    C# 2023年5月31日
    00
  • C# 如何获取出错的错误所在行数信息 原创

    为了获取C#代码中出错的错误所在行数,可以利用 StackTrace 类。StackTrace 类提供了一个堆栈跟踪,可用于获取发生未处理异常时的调用信息。通过调用StackTrace.GetFrame 方法并指定相应的帧索引,可以获取堆栈上的指定帧中的文件名、行号、列号及代码行 下面是获取出错行号的具体步骤: 第一步:获取StackTrace对象 在出现异…

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