草庐IT

手把手教你用C#语言写一个简单计算器窗体(附源代码文件和演示视频)

小张冲鸭 2023-04-20 原文

手把手教你用C#语言写一个简单计算器窗体(附源代码文件和演示视频)!

目录

C#简介:

开发工具的介绍和安装:

计算器的编写过程:

下面是源代码(Form1.cs文件):

彩蛋:

1.插入并载入新的窗体(窗口):

2.插入图片并让其适中显示:

下面是“彩蛋”源代码(Form2.cs文件):

最终效果演示:

帮人帮到底!源代码文件分享链接如下:


C#简介:

       C#是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

开发工具的介绍和安装:

这里用的是VS2022,可以去官网下载安装(链接如下)Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器

Visual Studio2022除了体积较大,可以说是很强大的IDE了可以编写多种语言并且内置编译器,代码补全功能也十分优秀。

计算器的编写过程:

首先我们新建一个窗体文件以后,映入眼帘的是一个空白的窗体(窗口),默认为Form1,我们计算器的UI就是要在这上面绘制 这里我们就用到了“控件”,也就是像按钮和文本框这些我们在使用中所需要的东西。

 如果vs2022打开后没有显示旁边的工具箱,可以在视图-->工具箱里面打开,或者CTRL+ALT+X;

 这里面的分类可以方便我们查找我们所需的工具

放置文本的控件

 

计算器的主要控件按钮

 我们新建完控件会发现,我们需要设置他的标题,大小还有里面的内容的字体等等

这里就需要用到属性。

我们需要单击控件,选中后,右键,然后点击属性,然后对属性进行修改。

 

TextBox基础属性设置

 我们双击任何一个按钮(控件)进入代码编辑区

我们会发现,每一个控件包括窗体都对应着一个函数,我们剩下的工作就是编辑代码,补全这些函数,使其联系起来,让代码运行顺利,并且达到我们想要的逻辑效果。 

下面是源代码(Form1.cs文件):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 计算器
{
    public partial class Form1 : Form
    {
      
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text += "1";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += "2";
        }

        private void button9_Click(object sender, EventArgs e)
        {
            textBox1.Text += "3";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            textBox1.Text += "4";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            textBox1.Text += "5";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text += "6";
        }

        private void button8_Click(object sender, EventArgs e)
        {
            textBox1.Text += "7";
        }

        private void button7_Click(object sender, EventArgs e)
        {
            textBox1.Text += "8";
        }

        private void button6_Click(object sender, EventArgs e)
        {
            textBox1.Text += "9";
        }
        private void button11_Click(object sender, EventArgs e)
        {
            textBox1.Text += "0";
        }
        private void button12_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Contains(".")) return;
            else
            { if (textBox1.Text != "") textBox1.Text += ".";
            }
        }
        private void button10_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            chu.Enabled = true;
            cheng.Enabled = true;
            jia.Enabled = true;
            jian.Enabled = true;
        }

        private void button13_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != ""&& textBox1.Text != "-") textBox1.Text = Convert.ToString(double.Parse(textBox1.Text) * -1);
            else if (textBox1.Text != "-") textBox1.Text += "-";
        }

        private void button14_Click(object sender, EventArgs e)
        {
            if(textBox1.Text!=""&& textBox1.Text != "-") textBox1.Text = Convert.ToString(double.Parse(textBox1.Text) * 0.01);
        }

        private void chu_Click(object sender, EventArgs e)
        {
            chu.Enabled = false;
            cheng.Enabled = true;
            jia.Enabled = true;
            jian.Enabled = true;
            if(textBox1.Text!="")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";

        }

        private void cheng_Click(object sender, EventArgs e)
        {
            chu.Enabled = true;
            cheng.Enabled = false;
            jia.Enabled = true;
            jian.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }

        private void jian_Click(object sender, EventArgs e)
        {
            chu.Enabled = true;
            cheng.Enabled = true;
            jia.Enabled = true;
            jian.Enabled = false;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }


        private void jia_Click(object sender, EventArgs e)
        {
            chu.Enabled = true;
            cheng.Enabled = true;
            jia.Enabled = false;
            jian.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }

        private void button19_Click(object sender, EventArgs e)
        {
            double hou;
            double qian = double.Parse(textBox2.Text);
            if (textBox1.Text == "")  hou = 0;
            else  hou = double.Parse(textBox1.Text);
            
            if(chu.Enabled==false)
            {
                if (hou != 0)
                {
                    textBox2.Text = "结果如下";
                    textBox1.Text = Convert.ToString(qian / hou);
                    chu.Enabled = true;
                }
                else
                {
                    MessageBox.Show("除数不能为0", "温馨提示");
                    textBox1.Text = "";
                    return;
                }


            }

            if (cheng.Enabled == false)
            {             
                textBox2.Text = "结果如下";
                textBox1.Text = Convert.ToString(qian * hou);
                cheng.Enabled = true;
            }
            if (jia.Enabled == false)
            {
                textBox2.Text = "结果如下";
                textBox1.Text = Convert.ToString(qian + hou);
                jia.Enabled = true;
            }
            if (jian.Enabled == false)
            {
                textBox2.Text = "结果如下";
                textBox1.Text = Convert.ToString(qian - hou);
                jian.Enabled = true;
            }
            if (mod.Enabled == false)
            {
                double s = double.Parse(textBox1.Text);
                int a = (int)s;
                if (a != s)
                {
                    MessageBox.Show("小数不能取余数!");
                    textBox1.Text = "";
                    return;
                }
                else
                {

                    textBox2.Text = "结果如下";
                    textBox1.Text = Convert.ToString(qian % hou);
                    mod.Enabled = true;

                }

                }

        }

        private void button15_Click(object sender, EventArgs e)
        {
            double r=double.Parse(textBox1.Text);
            if(r<0)
            {
                MessageBox.Show("被开方数不能为0");
                textBox1.Text = "";
                return;

            }
            else
            {
                textBox1.Text = Convert.ToString(Math.Sqrt(r));
            }

        }


        private void button16_Click(object sender, EventArgs e)
        {

            double s = double.Parse(textBox1.Text);
            int a=(int)s;
            if(a!=s)
            {
                MessageBox.Show("小数不能取余数!");
                textBox1.Text = "";
                return;
            }
            else
            {
                mod.Enabled = false;
                chu.Enabled = true;
                cheng.Enabled = true;
                jia.Enabled = true;
                jian.Enabled = true;
                if (textBox1.Text != "")
                {
                    textBox2.Text = textBox1.Text;
                    textBox1.Text = "";
                }
                else textBox2.Text = "0";
            }


        }

        private void button17_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "") textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
            else return;

        }

        private void button16_Click_1(object sender, EventArgs e)
        {
            
            Form2 B2 = new Form2();
            B2.Show();

        }

        private void button18_Click(object sender, EventArgs e)
        {
            double r = double.Parse(textBox1.Text);

            textBox2.Text = "结果如下";
            textBox1.Text = Convert.ToString(r*r);
            
        }

        private void button20_Click(object sender, EventArgs e)
        {
            double s = double.Parse(textBox1.Text);
            int a = (int)s;
            
            if (a != s)
            {
                MessageBox.Show("小数不能求阶乘");
                textBox1.Text = "";
                return;
            }
            else
            {
                if(a==0)
                {
                    textBox1.Text = "1";
                    return;
                }
                int cnt = 1;
                for(int i = 1; i <= a; i++)
                {
                    cnt *= i;
                }
                textBox2.Text = "结果如下";
                textBox1.Text = Convert.ToString(cnt);
            }
        }
    }
}

彩蛋:

本计算器还有另一个“彩蛋”功能(如下图)

 

 这里我们要学的东西分为两个:

1.插入并载入新的窗体(窗口):

 首先,在视图中打开解决方案资源管理器

然后选中项目,右键点击鼠标 ,然后在添加中找到窗体

2.插入图片并让其适中显示:

首先,插入所需控件PictureBox

 单击选中后,右键选择图像

 然后选择本地文件后插入

 然后修改图片属性,修改其尺寸填充方式

 然后我们仿照Form1的方式设计UI并且编写和填充函数。

下面是“彩蛋”源代码(Form2.cs文件):

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 计算器
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button16_Click(object sender, EventArgs e)
        {
            if(textBox1.Text=="")
            {
                MessageBox.Show("请输入年收入!");
                return;

            }
            else
            {
                double r=double.Parse(textBox1.Text);
                double cnt = 0;
                if (r <= 36000) cnt = r * 0.03;
                else if (r <= 144000) cnt = 36000 * 0.03 + (r-36000) * 0.1;
                else if (r <= 300000) cnt = 36000 * 0.03 + (144000 - 36000) * 0.1+ (r- 144000)*0.2;
                else if (r <= 420000) cnt = 36000 * 0.03 + (144000 - 36000) * 0.1 + (300000- 144000) * 0.2+(r-30000)*0.25;
                else if (r <= 660000) cnt = 36000 * 0.03 + (144000 - 36000) * 0.1 + (300000 - 144000) * 0.2 + (420000 - 30000) * 0.25+(r-420000)*0.3;
                else if (r <= 960000) cnt = 36000 * 0.03 + (144000 - 36000) * 0.1 + (300000 - 144000) * 0.2 + (420000 - 30000) * 0.25 + (660000 - 420000) * 0.3+(r-660000)*0.35;
                else if (r > 960000) cnt = 36000 * 0.03 + (144000 - 36000) * 0.1 + (300000 - 144000) * 0.2 + (420000 - 30000) * 0.25 + (660000 - 420000) * 0.3 + (960000 - 660000) * 0.35+(r-960000)*0.45;

                textBox2.Text=Convert.ToString(cnt);


            }

        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }
    }
}

最终效果演示:

C#简单计算器效果演示

帮人帮到底!源代码文件分享链接如下:

点击我链接直达,记得点赞支持一下哦!https://pan.baidu.com/s/1EmbrvxnQRJIWXbFyMayNzQ?pwd=6666 提取码:6666

(新人小白发帖 大佬不喜勿喷!) 

有问题欢迎随时联系我!!!

感谢支持!!!
 

有关手把手教你用C#语言写一个简单计算器窗体(附源代码文件和演示视频)的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

随机推荐