当前位置: 首页 > news >正文

白骑士的C#教学实战项目篇 4.2 图形用户界面(GUI)应用

系列目录

上一篇:白骑士的C#教学实战项目篇 4.1 控制台应用程序

        在这一部分,我们将从简单的控制台应用程序过渡到图形用户界面(GUI)应用程序。GUI 应用程序更加直观和用户友好,是现代软件开发的核心内容。我们将介绍如何使用 Windows Forms 和 Windows Presentation Foundation (WPF) 开发桌面应用程序,并通过开发一个记事本应用项目来巩固所学知识。

        图形用户界面(GUI)应用程序使用户可以通过图形元素与应用程序进行交互。这些图形元素包括窗口、按钮、文本框等。在 C# 中,主要有两种常见的 GUI 开发框架:Windows Forms 和 Windows Presentation Foundation (WPF)。

使用 Windows Forms 开发桌面应用

        Windows Forms 是 .NET 框架的一部分,用于创建具有图形界面的桌面应用程序。它简单易用,适合快速开发小型应用程序。

创建一个简单的 Windows Forms 应用程序

  1. 新建项目:在 Visual Studio 中,选择 “创建新项目”,选择 “Windows Forms App (.NET Framework)” 模板。
  2. 设计界面:使用拖放方式添加控件,例如按钮和文本框。
  3. 编写代码:
    using System;
    using System.Windows.Forms;public class MainForm : Form
    {private Button button;private TextBox textBox;public MainForm(){button = new Button();button.Text = "Click Me";button.Location = new System.Drawing.Point(50, 50);button.Click += Button_Click;textBox = new TextBox();textBox.Location = new System.Drawing.Point(50, 100);textBox.Width = 200;Controls.Add(button);Controls.Add(textBox);}private void Button_Click(object sender, EventArgs e){textBox.Text = "Hello, Windows Forms!";}[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new MainForm());}
    }

        在这个示例中,创建了一个包含按钮和文本框的简单窗体应用程序。当用户点击按钮时,文本框中会显示 “Hello, Windows Forms!”。

使用 WPF 开发现代界面应用

        Windows Presentation Foundation (WPF) 是一个用于构建现代桌面应用程序的 UI 框架,提供了更丰富的图形和动画支持。

创建一个简单的 WPF 应用程序

  1. 新建项目:在 Visual Studio 中,选择 “创建新项目”,选择 “WPF App (.NET Core)” 模板。
  2. 设计界面:在 XAML 文件中定义界面元素:
    <Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="200" Width="300"><Grid><Button Name="button" Content="Click Me" Width="100" Height="30" VerticalAlignment="Top" Margin="100,50,0,0" Click="Button_Click"/><TextBox Name="textBox" Width="200" Height="30" VerticalAlignment="Top" Margin="50,100,0,0"/></Grid>
    </Window>
  3. 编写代码:
    using System.Windows;namespace WpfApp
    {public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){textBox.Text = "Hello, WPF!";}}
    }

        在这个示例中,创建了一个包含按钮和文本框的简单 WPF 应用程序。当用户点击按钮时,文本框中会显示 “Hello, WPF!”。

实践项目:开发一个记事本应用

        现在我们将综合运用 Windows Forms 和 WPF 技术,开发一个简单的记事本应用程序。这个应用程序将包括基本的文本编辑功能,如新建、打开、保存和文本编辑。

使用 Windows Forms 开发记事本应用

  1. 设计界面:在设计视图中添加菜单栏、文本框和相关控件。
  2. 编写代码:
    using System;
    using System.IO;
    using System.Windows.Forms;public class NotepadForm : Form
    {private MenuStrip menuStrip;private ToolStripMenuItem fileMenu;private ToolStripMenuItem newMenuItem;private ToolStripMenuItem openMenuItem;private ToolStripMenuItem saveMenuItem;private TextBox textBox;public NotepadForm(){menuStrip = new MenuStrip();fileMenu = new ToolStripMenuItem("File");newMenuItem = new ToolStripMenuItem("New", null, NewFile);openMenuItem = new ToolStripMenuItem("Open", null, OpenFile);saveMenuItem = new ToolStripMenuItem("Save", null, SaveFile);fileMenu.DropDownItems.Add(newMenuItem);fileMenu.DropDownItems.Add(openMenuItem);fileMenu.DropDownItems.Add(saveMenuItem);menuStrip.Items.Add(fileMenu);textBox = new TextBox();textBox.Multiline = true;textBox.Dock = DockStyle.Fill;Controls.Add(textBox);Controls.Add(menuStrip);MainMenuStrip = menuStrip;}private void NewFile(object sender, EventArgs e){textBox.Clear();}private void OpenFile(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){if (openFileDialog.ShowDialog() == DialogResult.OK){textBox.Text = File.ReadAllText(openFileDialog.FileName);}}}private void SaveFile(object sender, EventArgs e){using (SaveFileDialog saveFileDialog = new SaveFileDialog()){if (saveFileDialog.ShowDialog() == DialogResult.OK){File.WriteAllText(saveFileDialog.FileName, textBox.Text);}}}[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new NotepadForm());}
    }

使用 WPF 开发记事本应用

  1. 设计界面:在 XAML 文件中定义界面元素:
    <Window x:Class="NotepadApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Notepad" Height="450" Width="800"><DockPanel><Menu DockPanel.Dock="Top"><MenuItem Header="File"><MenuItem Header="New" Click="NewFile"/><MenuItem Header="Open" Click="OpenFile"/><MenuItem Header="Save" Click="SaveFile"/></MenuItem></Menu><TextBox Name="textBox" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/></DockPanel>
    </Window>
  2. 编写代码:
    using System;
    using System.IO;
    using System.Windows;namespace NotepadApp
    {public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void NewFile(object sender, RoutedEventArgs e){textBox.Clear();}private void OpenFile(object sender, RoutedEventArgs e){Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();if (openFileDialog.ShowDialog() == true){textBox.Text = File.ReadAllText(openFileDialog.FileName);}}private void SaveFile(object sender, RoutedEventArgs e){Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog();if (saveFileDialog.ShowDialog() == true){File.WriteAllText(saveFileDialog.FileName, textBox.Text);}}}
    }

总结

        在本节中,我们从基本的控制台应用程序逐步过渡到图形用户界面(GUI)应用程序,通过 Windows Forms 和 WPF 这两种不同的框架来开发桌面应用程序。通过开发一个记事本应用项目,我们综合运用了所学知识,展示了如何设计和实现一个实际的应用程序。继续练习和扩展这些项目,可以帮助您进一步提高 C# 编程技能,为更复杂的项目打下坚实的基础。

下一篇:白骑士的C#教学实战项目篇 4.3 Web开发​​​​​​​

相关文章:

白骑士的C#教学实战项目篇 4.2 图形用户界面(GUI)应用

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.1 控制台应用程序 在这一部分&#xff0c;我们将从简单的控制台应用程序过渡到图形用户界面&#xff08;GUI&#xff09;应用程序。GUI 应用程序更加直观和用户友好&#xff0c;是现代软件开发的核心内容。我们将介绍如…...

【Java学习】反射和枚举详解

所属专栏&#xff1a;Java学习 &#x1f341;1. 反射 在程序运行时&#xff0c;可以动态地创建对象、调用方法、访问和修改字段&#xff0c;以及获取类的各种属性信息&#xff08;如成员变量、方法、构造函数等&#xff09;&#xff0c;这种机制就称为反射 反射相关的类 类名用…...

leetcode-461. 汉明距离

题目描述 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 示例 1&#xff1a; 输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1 (0 0 0 1) 4 (0 1 0 0) …...

rpmbuild 将二进制文件 strip,文件 md5 发生改变

rpmbuild 将二进制文件 strip&#xff0c;文件 md5 发生改变 上一篇中提到 strip 相关的操作&#xff0c;会去掉文件中的调试信息【strip 、objdump、objcopy 差异与区别】 在编译或打包环境中&#xff0c;莫名其妙的文件 大小 md5 都发生了改变&#xff0c;怀疑跟 rpmbuild 打…...

selenium爬取搜狗网站新闻的小Demo

使用之前请确保自己chrome浏览的版本与chromedriver的版本一致&#xff0c; Mac确保chromedriver已经放到python的bin目录中 Windows确保chromedriver已经放到python.exe同目录中 当前selenium Version: 3.141.0&#xff0c;4版本后面改为&#xff1a;find_element(By.CLASS_NA…...

R 语言学习教程,从入门到精通,R CSV 文件使用(17)

1、R CSV 文件 R 作为统计学专业工具&#xff0c;如果只能人工的导入和导出数据将使其功能变得没有意义&#xff0c;所以 R 支持批量的从主流的表格存储格式文件&#xff08;例如 CSV、Excel、XML 等&#xff09;中获取数据。 1.1、CSV 表格交互 CSV&#xff08;Comma-Separ…...

【LLM之Base Model】Weaver论文阅读笔记

研究背景 当前的大型语言模型&#xff08;LLM&#xff09;如GPT-4等&#xff0c;尽管在普通文本生成中表现出色&#xff0c;但在创造性写作如小说、社交媒体内容等方面&#xff0c;往往不能很好地模仿人类的写作风格。这些模型在训练和对齐阶段&#xff0c;往往使用的是大规模…...

泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第一集(了解赛题)

此次目的&#xff1a; hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01;准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程&#xff0c;顺便也将其中所学习到的知识分享出来。这是第一集&#xff08;了解赛题&#x…...

使用C++调用PyTorch模型的弯弯绕绕,推荐LibTorch加载,C++处理

需求&#xff1a;使用C调用Pytorch模型&#xff0c;对处理后的图像进行预测。 第一种&#xff0c;使用C调用Python代码处理&#xff0c;使用pybind11源代码再末尾 缺点&#xff0c;导入Python包非常麻烦&#xff0c;执行的C程序找不到cv2 torch包等等 本人解决了cv2 numpy等包&…...

实现异形(拱形)轮播图

项目需要实现如上图所示的轮播图。 实现思路&#xff1a; 1.项目引入使用普通轮播图。 2.根据轮播图个数&#xff0c;动态给可视范围的第一个轮播图和最后一个轮播图添加样式。 代码实现&#xff1a; 经调研&#xff0c;使用slick轮播图&#xff08;官网地址 https://kenwheel…...

【软件测试】2024年职业院校技能大赛高职组“软件测试”赛项样题

目录 任务一&#xff1a;功能测试&#xff08;45 分&#xff09; 任务二&#xff1a;自动化测试&#xff08;15 分&#xff09; 任务三&#xff1a;性能测试&#xff08;15 分&#xff09; 任务四&#xff1a;单元测试&#xff08;10 分&#xff09; 任务五&#xff1a;接…...

python数组和队列

一、数组 如果一个列表只包含数值&#xff0c;那么使用array.array会更加高效&#xff0c;数组不仅支持所有可变序列操作&#xff08;.pop、.insert、.extent等&#xff09;&#xff0c;而且还支持快速加载项和保存项的方法&#xff08;.fromfile、.tofile等&#xff09; 创建…...

Vision Transformer(ViT)一种将Transformer架构应用于计算机视觉领域的模型

Vision Transformer&#xff08;ViT&#xff09;是一种将Transformer架构应用于计算机视觉领域的模型&#xff0c;它通过自注意力机制处理图像数据&#xff0c;与传统的卷积神经网络&#xff08;CNN&#xff09;相比&#xff0c;ViT能够更好地捕捉全局依赖关系。以下是对ViT的详…...

得到任务式 大模型应用开发学习方案

根据您提供的文档内容以及您制定的大模型应用开发学习方案&#xff0c;我们可以进一步细化任务式学习的计划方案。以下是具体的任务式学习方案&#xff1a; 任务设计 初级任务 大模型概述&#xff1a;阅读相关资料&#xff0c;总结大模型的概念、发展历程和应用领域。深度学…...

使用el-menu跳转时偶尔会出现路由已经变了,但是页面却显示空白的情况

刚开始我以为是我数据加载的问题&#xff0c;后来又看有人说是template里不能包多个div&#xff0c;但我去看我出错的组件&#xff0c;并没有出现两个div。 后来我就把每个都给改了&#xff0c;即使是elemen-ui的标签也全部改在一个div里&#xff0c;就发现没问题了。 我改的…...

C语言家教记录(七)

C语言家教记录&#xff08;七&#xff09; 导语字符串字面量变量读写字符串操作函数惯用法数组 结构联合枚举总结与复习 导语 本次授课的内容如下&#xff1a;字符串&#xff0c;结构体、联合体、枚举 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 字…...

【数据结构】——十大排序详解分析及对比

【数据结构】——十大排序详解分析及对比 文章目录 【数据结构】——十大排序详解分析及对比前言1. 排序的概念及其运用1.1 排序的概念1.2 排序的应用 2. 插入排序2.1 直接插入排序2.2 希尔排序 3. 选择排序3.1 选择排序3.2 堆排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 霍…...

散点图适用于什么数据 thinkcell散点图设置不同颜色

在数据可视化的众多工具和技巧中&#xff0c;散点图是一种极为有效的方式&#xff0c;能够揭示变量之间的关系&#xff0c;尤其是在探索数据集的相关性、分布趋势、集群现象时。而在众多助力于制作高质量散点图的工具中&#xff0c;think-cell插件以其高效的操作和丰富的功能&a…...

1. windows搭建Kafka教程

目录 1. 部署zookeeper 1.1 下载地址 1.3 修改zoo配置 1.4 启动zookeepe服务 02 部署kafka 2.1 下载组件包 2.2 解压安装包 2.3 修改配置 2.4 启动kafka服务端 1. 部署zookeeper 1.1 下载地址 下载地址: kafka/zookeeper 下载地址 (qq.com) 1.2 解压 &#xff08;…...

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑&#xff1a; 为什么有些标签可以触发&#xff0c;有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求&#xff1a; 分析&#xff1a; 结果&#xff1a; 2、J…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...