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日

相关文章

  • asp.net core webapi 服务端配置跨域的实例

    在ASP.NET Core WebAPI中配置跨域的实例如下: 在Startup.cs文件中添加跨域服务 在ConfigureServices方法中添加跨域服务。例如,以下代码添加了一个名为“AllowAll”的跨域服务: public void ConfigureServices(IServiceCollection services) { service…

    C# 2023年5月16日
    00
  • extern外部方法使用C#的实现方法

    Sure! 针对题目中的“extern外部方法使用C#的实现方法”,我们来一步一步地探讨一下C#中如何使用extern关键字来调用外部C/C++函数。 什么是extern关键字 在C#开发中,extern关键字经常被用于调用外部C/C++函数。它的主要作用是将一个方法的实现声明为在外部语言或DLL文件中的函数。 使用extern关键字的方式是:在函数上方添加…

    C# 2023年6月1日
    00
  • C#入门之定义类成员与接口实现

    在这里我将为你详细讲解“C#入门之定义类成员与接口实现”的完整攻略。以下是详细步骤: 步骤一:定义类 定义类是面向对象编程中的基础,通过定义类,可以定义对象的属性和方法。首先,打开Visual Studio或其他C#编程软件,创建一个新的C#控制台应用程序。接着,创建一个新的类,命名为“Person”: public class Person { publi…

    C# 2023年6月1日
    00
  • C# md5 算法实现代码

    C# MD5 算法实现,可以通过使用System.Security.Cryptography空间下的MD5类来完成。下面是完整的攻略: 步骤 1:添加命名空间 首先,在你的 C# 代码文件中,添加如下命名空间: using System.Security.Cryptography; 步骤 2:创建 MD5 对象 接下来,创建一个 MD5 对象,代码如下: M…

    C# 2023年5月31日
    00
  • C#中委托的进一步理解

    在C#中,委托是一种特殊的类型,它是一种可以存储对其他方法的引用(或类似指针的实体),并且可以调用这些方法的对象。委托可以像一般函数一样调用,并且在函数调用时会自动通知它所负责的所有方法去执行。 在C#中,委托可以用来实现回调机制,将一个委托对象作为参数传递给另一个函数,这样,当另一个函数完成任务后,就可以调用这个委托来通知回调函数。 委托属于引用类型,它可…

    C# 2023年6月6日
    00
  • C# using语法糖图文详解

    C#的using语法糖是一种方便管理资源的方法。它在代码块的开头定义资源,并在代码块结束时自动释放资源。该语法糖通常用于处理文件、网络连接、数据库连接和其它需要及时释放资源的对象。 定义和语法 using语法糖定义一个代码块,在该代码块开始处创建所需的资源,并在结束处释放资源。语法如下: using (resource) { // code } resour…

    C# 2023年5月31日
    00
  • C#生成比较短的Token字符串

    当我们开发Web应用程序的时候,经常需要使用Token字符串来保证数据安全性,如身份验证、跨域访问等。但是由于Token字符串的长度比较长,可能会占用过多的空间和带宽资源,因此我们需要生成比较短的Token字符串。下面我给出一些实现方法和示例。 方法一:使用C#中的Base64编码 Base64编码是一种常用的编码方式,可以将任意二进制数据编码成只包含64个…

    C# 2023年6月7日
    00
  • C#实现打印与打印预览功能的思路及代码

    C#实现打印与打印预览功能可以通过以下步骤来完成: 1. 准备打印文档 首先,我们需要准备好需要打印的文档。可以使用C#中的PrintDocument类来创建打印文档。以下是一个简单的示例代码,演示如何使用PrintDocument类: private void PrintDocument1_PrintPage(object sender, PrintPag…

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