C# Windows Forms应用程序-002
目录
项目结构
主类和命名空间
构造函数和析构函数
初始化组件 (InitializeComponent)
按钮点击事件处理程序
主程序入口点
项目截图:
完整代码:
项目结构
这个项目是一个简单的C# Windows Forms应用程序,获取指定文件的根信息,包含一个主窗体 Form1 和一些控件(标签、文本框、按钮等)。整个项目的主要功能是让用户选择文件或文件夹,并提供了一些关于这些路径的信息。
主类和命名空间
命名空间: Files
类: Form1 继承自 System.Windows.Forms.Form
成员变量
Label label1: 显示提示信息的标签。
TextBox textBox1: 用户输入或显示文件/文件夹路径的文本框。
Button button1, button2, button3, button4: 四个按钮分别用于不同的操作。
FolderBrowserDialog folderBrowserDialog1: 文件夹浏览对话框。
OpenFileDialog openFileDialog1: 文件打开对话框。
IContainer components: 窗体设计器使用的容器对象。
构造函数和析构函数
构造函数: 调用 InitializeComponent() 方法来初始化窗体及其控件。
析构函数: 如果 components 不为空,则释放其资源。
初始化组件 (InitializeComponent)
这部分代码由Windows Forms设计器生成,主要负责设置各个控件的位置、大小和其他属性。例如:
设置 label1 的位置、大小和文本内容。
设置 textBox1 的初始值为 "C:\\Windows"。
设置每个按钮的位置、大小和点击事件处理程序。
按钮点击事件处理程序
button1_Click:当用户点击“浏览文件夹”按钮时,会弹出一个文件夹选择对话框。如果用户选择了某个文件夹并确认,所选文件夹的路径会被填入 textBox1 中。
private void button1_Click(object sender, EventArgs e) {if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = folderBrowserDialog1.SelectedPath;} }
button2_Click:当用户点击“浏览文件”按钮时,会弹出一个文件打开对话框。如果用户选择了某个文件并确认,所选文件的路径会被填入 textBox1 中。
private void button2_Click(object sender, EventArgs e) {if (openFileDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = openFileDialog1.FileName;} }
button3_Click:当用户点击“显示根信息”按钮时,会获取当前路径所在的驱动器信息,并通过消息框显示出来。这包括驱动器类型、总空间和可用空间。
private void button3_Click(object sender, EventArgs e) {string path = textBox1.Text;try{DriveInfo driveInfo = new DriveInfo(Path.GetPathRoot(path));MessageBox.Show( $ "驱动器类型: {driveInfo.DriveType}" + $ "总空间: {driveInfo.TotalSize} bytes " +$ "可用空间: {driveInfo.AvailableFreeSpace} bytes");}catch (Exception ex){MessageBox.Show("无法获取驱动器信息: " + ex.Message);} }
button4_Click:当用户点击“父目录信息”按钮时,会将 textBox1 中的路径更改为该路径的父目录路径。如果已经是根目录,则弹出提示信息。
private void button4_Click(object sender, EventArgs e) {string path = textBox1.Text;try{string parentDir = Path.GetDirectoryName(path);if (!string.IsNullOrEmpty(parentDir)){textBox1.Text = parentDir;}else{MessageBox.Show("当前路径已是根目录或无效路径。");}}catch (Exception ex){MessageBox.Show("无法获取父目录信息: " + ex.Message);} }
主程序入口点
- 在
Program
类中定义了静态方法Main
,这是应用程序的入口点。调用Application.Run(new Form1())
来启动应用程序并显示主窗体Form1
。
static class Program {[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());} }
项目截图:
完整代码:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Data; using System.IO; using System.Windows.Forms;namespace Files {public class Form1 : System.Windows.Forms.Form{private Label label1;private TextBox textBox1;private Button button1;private FolderBrowserDialog folderBrowserDialog1;private Button button2;private Button button3;private OpenFileDialog openFileDialog1;private Button button4;private IContainer components = null;public Form1(){InitializeComponent();}protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗体设计器生成的代码private void InitializeComponent(){this.label1 = new Label();this.textBox1 = new TextBox();this.button1 = new Button();this.folderBrowserDialog1 = new FolderBrowserDialog();this.button2 = new Button();this.button3 = new Button();this.openFileDialog1 = new OpenFileDialog();this.button4 = new Button();this.SuspendLayout();// label1this.label1.AutoSize = true;this.label1.Location = new System.Drawing.Point(15, 22);this.label1.Name = "label1";this.label1.Size = new System.Drawing.Size(159, 13);this.label1.TabIndex = 0;this.label1.Text = "文件或文件夹全路径名:";// textBox1this.textBox1.Location = new System.Drawing.Point(17, 57);this.textBox1.Name = "textBox1";this.textBox1.Size = new System.Drawing.Size(320, 20);this.textBox1.TabIndex = 1;this.textBox1.Text = @"C:\Windows";// button1this.button1.Location = new System.Drawing.Point(17, 104);this.button1.Name = "button1";this.button1.Size = new System.Drawing.Size(80, 23);this.button1.TabIndex = 2;this.button1.Text = "浏览文件夹";this.button1.Click += new EventHandler(this.button1_Click);// button2this.button2.Location = new System.Drawing.Point(97, 104);this.button2.Name = "button2";this.button2.Size = new System.Drawing.Size(80, 23);this.button2.TabIndex = 5;this.button2.Text = "浏览文件";this.button2.Click += new EventHandler(this.button2_Click);// button3this.button3.Location = new System.Drawing.Point(177, 104);this.button3.Name = "button3";this.button3.Size = new System.Drawing.Size(80, 23);this.button3.TabIndex = 6;this.button3.Text = "显示根信息";this.button3.Click += new EventHandler(this.button3_Click);// button4this.button4.Location = new System.Drawing.Point(257, 104);this.button4.Name = "button4";this.button4.Size = new System.Drawing.Size(80, 23);this.button4.TabIndex = 7;this.button4.Text = "父目录信息";this.button4.Click += new EventHandler(this.button4_Click);// Form1this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);this.AutoScaleMode = AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(400, 175);this.Controls.Add(this.button4);this.Controls.Add(this.button3);this.Controls.Add(this.button2);this.Controls.Add(this.button1);this.Controls.Add(this.textBox1);this.Controls.Add(this.label1);this.FormBorderStyle = FormBorderStyle.FixedSingle;this.MaximizeBox = false;this.MinimizeBox = false;this.Name = "Form1";this.StartPosition = FormStartPosition.CenterScreen;this.Text = "文件操作示例";this.ResumeLayout(false);this.PerformLayout();}#endregionprivate void button1_Click(object sender, EventArgs e){if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = folderBrowserDialog1.SelectedPath;}}private void button2_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = openFileDialog1.FileName;}}private void button3_Click(object sender, EventArgs e){string path = textBox1.Text;try{DriveInfo driveInfo = new DriveInfo(Path.GetPathRoot(path));MessageBox.Show($"驱动器类型: {driveInfo.DriveType}\n" +$"总空间: {driveInfo.TotalSize} bytes\n" +$"可用空间: {driveInfo.AvailableFreeSpace} bytes");}catch (Exception ex){MessageBox.Show("无法获取驱动器信息: " + ex.Message);}}private void button4_Click(object sender, EventArgs e){string path = textBox1.Text;try{string parentDir = Path.GetDirectoryName(path);if (!string.IsNullOrEmpty(parentDir)){textBox1.Text = parentDir;}else{MessageBox.Show("当前路径已是根目录或无效路径。");}}catch (Exception ex){MessageBox.Show("无法获取父目录信息: " + ex.Message);}}}static class Program{[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}} }
这是个简单的Windows Forms应用程序展示了如何使用基本的Windows Forms控件(如标签、文本框、按钮)来构建一个交互式界面。通过按钮点击事件处理程序,实现了文件夹和文件的选择,以及获取和显示路径相关信息的功能。
相关文章:

C# Windows Forms应用程序-002
目录 项目结构 主类和命名空间 构造函数和析构函数 初始化组件 (InitializeComponent) 按钮点击事件处理程序 主程序入口点 项目截图: 完整代码: 项目结构 这个项目是一个简单的C# Windows Forms应用程序,获取指定文件的根信息…...

理解计算机系统_线程(八):并行
前言 以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_并发编程(10)_线程(七):基于预线程化的…...

【MySQL】09.索引
索引是用来提高数据库的性能的,但查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值在于提高一个海量数据的检索速度。 1. 认识磁盘 MySQL 给用户提供存储服务,而存储的都是数据&…...

【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH
windows 11安装 AdGuardHome,实现开机自启,使用 DoH 下载 AdGuardHome解压 AdGuardHome启动 AdGuard Home设置 AdGuardHome设置开机自启安装 NSSM设置开机自启重启电脑后我们可以访问 **http://127.0.0.1/** 设置使用 AdGuardHome DNS 效果图 下载 AdGua…...

[Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)
游戏常用运行库 合集 整合了许多游戏会用到的运行库,支持 Windows XP – Windows 11 系统,并且支持自动检测系统勾选推荐的运行库,方便快捷。 本版特点: By:mefcl 整合常见最新游戏所需运行库 根据系统自动勾选推荐…...
MYSQL order 、group 与row_number详解
一、order by order by A ASC, B DESC,C ASC … 上述语句会先按照A排序,当A相同的时候再按照B排序,当B相同的再按照C排序,并会不按照ABC组合一起排序 二、group by group by A,B,C… select 中的字段必须是group by中的字段,…...
QT之巧用对象充当信号接收者
备注:以下仅为演示不代表合理性,适合简单任务,逻辑简单、临时使用,可保持代码简洁,对于复杂的任务应创建一个专门的类来管理信号和线程池任务. FileScanner类继承QObject和QRunnable,扫描指定目录下的文件获…...
《红警2000》游戏信息
游戏背景:与《红色警戒》系列的其他版本类似,基于红警 95 的背景设定,讲述了第二次世界大战期间,世界各国为了争夺全球霸权而展开战争。游戏画面与音效:在画面上相比早期的红警版本有一定提升,解析度更高&a…...
Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析
一、基础方案:Vue3 ThinkPHP8 PHP8.x 传统架构 优点 成熟稳定 组合经过长期验证,文档和社区资源丰富ThinkPHP8 对PHP8.x有良好支持,性能比PHP7提升20-30% 开发效率高 TP8的ORM和路由系统大幅减少样板代码Vue3组合式API Vite开发…...

(九)PMSM驱动控制学习---高阶滑膜观测器
在之前的文章中,我们介绍了永磁同步电机无感控制中的滑模观测器,但是同时我们也认识到了他的缺点:因符号函数带来的高频切换分量,使用低通滤波器引发相位延迟;在本篇文章,我们将会介绍高阶滑模观测器的无感…...

25年上半年五月之软考之设计模式
目录 一、单例模式 二、工厂模式 三、 抽象工厂模式 四、适配器模式 五、策略模式 六、装饰器模式 编辑 考点:会挖空super(coffeOpertion); 七、代理模式 为什么必须要使用代理对象? 和装饰器模式的区别 八、备忘录模式 一、单例模式 这个…...

Mongo DB | 多种修改数据库名称的方式
目录 方法一:使用 mongodump 和 mongorestore 命令 方法二:使用 db.copyDatabase() 方法 方法三:使用 MongoDB Compass 在 MongoDB 中,更改数据库名称并不是一个直接的操作,因为 MongoDB 不提供直接重命名数据库的命…...

QListWidget的函数,信号介绍
前言 Qt版本:6.8.0 该类用于列表模型/视图 QListWidgetItem函数介绍 作用 QListWidget是Qt框架中用于管理可交互列表项的核心组件,主要作用包括: 列表项管理 支持动态添加/删除项:addItem(), takeItem()批量操作:addItems()…...
Python类属性与实例属性的覆盖机制:从Vector2d案例看灵活设计
类属性与实例属性的交互机制 Python中类属性与实例属性的关系体现了语言的动态特性。当访问一个实例属性时,Python会首先查找实例自身的__dict__,如果找不到,才会去查找类的__dict__。这种机制使得类属性可以优雅地作为实例属性的默认值。 …...
QML与C++交互2
在QML与C的交互中,主要有两种方式:在C中调用QML的方法和在QML中调用C的方法。以下是具体的实现方法。 在C中调用QML的方法 首先,我们需要在QML文件中定义一个函数,然后在C代码中调用它。 示例 //QML main.qml文件 import QtQu…...

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析
引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…...
springboot中各模块间实现bean之间互相调用(service以及自定义的bean)
springboot中各模块间实现bean之间互相调用(service以及自定义的bean) https://blog.csdn.net/qq_29477175/article/details/122827446?ops_request_misc&request_id&biz_id102&utm_termspringboot%E5%A4%9A%E6%A8%A1%E5%9D%97%E4%B9%8B%E…...
RabbitMQ 可靠性保障:消息确认与持久化机制(二)
四、持久化机制:数据安全的护盾 (一)交换机持久化 交换机持久化是确保消息路由稳定的重要保障 。在 RabbitMQ 中,交换机负责接收生产者发送的消息,并根据路由规则将消息路由到相应的队列 。如果交换机在 RabbitMQ 重…...
QML学习07Property
Property 1、Property1.1 定义控件1.2 给控件取别名,不向外暴露控件名字 2、总结 1、Property property int myTopMargin: 0 property int myBottomMargin: 0 property real myReal: 0.0 //双精度浮点数 property string myString: "test" property…...
Skywalking安装部署使用教程
目录 核心功能 架构设计 安装与配置 使用场景 社区与支持 总结 官网 https:///apache/skywalking 部署Skywalking 添加报警配置 自定义告警规则如果您需要自定义告警规则,则需要编辑 alarm-settings.yml 文件并添加自定义的规则。具体来说,您需要按照 YAML 格式定义…...
网络编程与axios技术
网络编程技术是指通过计算机网络实现不同设备之间数据交互的技术。它基于网络通信协议(如TCP/IP、HTTP)和编程语言的支持,结合库和API实现高效的数据传输与通信。以下是几种主流技术栈(JavaScript、TypeScript、React、Next.js、P…...

【结构设计】以3D打印举例——持续更新
【结构设计】以立创EDA举例——持续更新 文章目录 [TOC](文章目录) 前言立创EDA官网教程一、3D外壳绘制二、3D外壳渲染三、3D外壳打印1.3D打印机——FDM2.3D打印机——光固化 四、3D外壳LOG设计1.激光雕刻机 总结 前言 提示:以下是本篇文章正文内容,下面…...

MySQL中的重要常见知识点(入门到入土!)
基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…...

理解全景图像拼接
1 3D到2D透视投影 三维空间上点 p 投影到二维空间 q 有两种方式:1)正交投影,2)透视投影。 正交投影直接舍去 z 轴信息,该模型仅在远心镜头上是合理的,或者对于物体深度远小于其到摄像机距离时的近似模型。…...

云原生安全基石:Linux进程隔离技术详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 进程隔离是操作系统通过内核机制将不同进程的运行环境和资源访问范围隔离开的技术。其核心目标在于: 资源独占:确保…...

基于PySide6与pycatia的CATIA几何阵列生成器开发实践
引言:参数化设计的工业价值 在航空航天、汽车制造等领域,复杂几何图案的批量生成是模具设计与机械加工的核心需求。传统手动建模方式存在效率低下、参数调整困难等问题。本文基于PySide6+pycatia技术栈,实现了一套支持动态参数配置、智能几何阵列生成的自动…...

Linux学习心得问题总结(三)
day09 文件权限篇 文件权限的属性有哪些?我们应如何理解这些属性? 文件权限的属性包括可读(r)、可写(w)、可执行(x)三种权限,根据文件类型可分为普通文件(.…...
蓝桥杯国14 不完整的算式
!!!!!!!!!!!!!!!理清思路 然后一步步写 问题描述 小蓝在黑板上写了一个形如 AopBC 的算式&#x…...

Anthropic推出Claude Code SDK,强化AI助理与自动化开发整合
Anthropic发布Claude Code SDK,协助开发团队将人工智慧助理整合进自动化开发流程,支援多轮对话、MCP协定及多元格式。 Anthropic推出Claude Code SDK,提供开发者与企业一套可程序化整合Claude AI助理至开发流程的工具。此SDK以命令列介面为基…...

6.4.1最小生成树
知识总览 生成树(一定是连通的): 是连通的无向图的一个子图,子图包含这个无向图的所有顶点有n-1条边(少一条边,生成树就不连通了)即为生成树,一个连通图可能有多个生成树 最小生成树(最小代价树): 只有连通的无向图才…...