C#笔记正课十九

C#之 十九 使用WinForm控件 十九 使用Win Form控件 比如说电脑有显示器,鼠标,主机以及键盘的基本元素组成。在windows窗体中也有其基本控件,这些控件在每一个窗体中都要用到,也就是说无所不在。有些控件可能外观不同但是他们的使用方式都基本上一样。 重点 Ø 掌握这些控件常用属性方法以及事件 Ø 能用编码的形式实 阅读详情

1、添加资源

通过Resources.resx打开资源管理器,选择加载资源的类型、路径和存储为。通过这种方式可以将外部资源复制一个作为内部资源。

 

使用代码来调用图片资源

private void Form1_Load(object sender, EventArgs e)
{
    //接收资源文件
    Bitmap photo = Properties.Resources.banana;
    pictureBox2.Image = photo;
    pictureBox2.SizeMode=PictureBoxSizeMode.Zoom;
}

使用代码来调用wav音频资源

using System.Media;
private void button1_Click(object sender, EventArgs e)
{
      UnmanagedMemoryStream yinpin = Properties.Resources.唱跳rap篮球;
      SoundPlayer player = new SoundPlayer(yinpin);
      player.Play();

}

2、进度条ProgressBar

创建一个进度条控件,控件会根据value属性的值来展示进度,可自行设置最大上限的值。

  

使用示例:通过timer控件来让进度条按时间增长

timer控件设置没多长时间触发一次事件

 private void timer1_Tick(object sender, EventArgs e)
 {
     if (progressBar1.Value== progressBar1.Maximum)//判断进度条是否到达最大值
     {
         //关闭计时器
         timer1.Stop();
         //禁止使用timer
         timer1.Enabled = false;
         MessageBox.Show("加载完成");
     }
     else
     {
         //没有达到最大值,就继续往上加
         progressBar1.Value++;
         label1.Text ="当前进度为:"+Convert.ToString(progressBar1.Value)+"%";//具体显示加载了多少
     }
 }

 private void 进度条_Load(object sender, EventArgs e)//页面加载时就触发的事件
 {
     timer1.Start();
 }    

3、文件/文件夹操作

1)打开文件

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();//实例化打开文件类
    //设置属性
    //对话框标题
    openFileDialog.Title = "选择文件";
    //设置初始路径
    openFileDialog.InitialDirectory = "C:\\Users\\Pictures\\Screenshots";
    //设置打开文件夹中筛选的类型
    openFileDialog.Filter = "Image|*.png;*.jpg|文本文件|*.txt";
    //设置默认的筛选器
    openFileDialog.FilterIndex = 1;//参数不是从0开始的索引,而是从1开始
    //是否允许多选
    openFileDialog.Multiselect=true;
    //关闭后回复到原本目录
    openFileDialog.ReadOnlyChecked = false;
    //显示
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        //获取到选中文件的路径
        string path = openFileDialog.FileName;
        //获取全部文件路径
        string[] files=openFileDialog.FileNames;
        string jj=null;
        //遍历数组
        foreach (var item in files)
        {
            jj += item+"\n";
        }
        MessageBox.Show("好开兄弟\n"+jj);
    }
}

2)保存文件

 private void button2_Click(object sender, EventArgs e)
 {
     //实例化保存文件
     SaveFileDialog saveFileDialog = new SaveFileDialog();
     //对话框标题
     saveFileDialog.Title = "保存文件";
     //设置保存文件类型
     saveFileDialog.Filter= "Image|*.png;*.jpg|文本文件|*.txt";
     //不写后缀时默认的格式
     saveFileDialog.DefaultExt = "txt";
     //是否自动加后缀
     saveFileDialog.AddExtension = true;
     //保存地址
     saveFileDialog.InitialDirectory= "C:\\Users\\Pictures\\Screenshots";

     //显示对话框
     if (saveFileDialog.ShowDialog() == DialogResult.OK)
     {
         string path=saveFileDialog.FileName;
         File.WriteAllText(path,"123456",System.Text.Encoding.UTF8);//保存路径,添加的内容,编码格式
     }
 }

3)打开文件夹

private void button3_Click(object sender, EventArgs e)
{
    //实例化
    FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
    //设置常用属性
    folderBrowserDialog.Description = "选择一个文件夹";
    //知道根目录的起始位置
    folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
    //设置默认的文件夹打开路径
    folderBrowserDialog.SelectedPath = "E:\\XIANGMU";
    //设置是否显示新建文件夹按钮
    folderBrowserDialog.ShowNewFolderButton = false;
    
    
    if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
    {
        string path = folderBrowserDialog.SelectedPath;
        MessageBox.Show("你的文件夹:"+ path);
    }
}

4、右键菜单

可以创建一个右键显示的菜单,菜单可自行添加内容,可对其中的内容绑定事件。

  

通过绑定不同的选项实现将textBox1中的内容复制到textBox2

 private void cToolStripMenuItem_Click(object sender, EventArgs e)
 {           
     Jqb = textBox1.Text;
 }

 private void vToolStripMenuItem_Click(object sender, EventArgs e)
 {
     textBox2.Text += Jqb;

 }

5、复合控件(用户控件)

从解决方案--->对应项目--->添加--->用户控件从这里可以设置自己需要功能的控件。

创建好控件运行后即可在本项目的工具箱中找到自己创建的控件。

 

C#练习题答案: 九十九九九九九【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战 九十九九九九九【难度:3级】: 答案1: using System.Collections.Generic; class Kata { public static string NumberToEnglish(int number) { Dictionary <int, string> numberReader = new Dictionary <... 阅读详情

相关推荐

C#基础学习(十九)| 用循环的方式来操作数组

C#基础学习(十九)| 用循环的方式来操作数组

Robot_PLC_HMI_Automation 850

C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』

在《C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』》这篇文章中,我们通过一个综合案例展示了如何使用多种WPF布局容器实现复杂的界面设计。本文详细介绍了如何创建一个登录界面,并使用 `Grid`、`StackPanel`、`Border` 和 `UniformGrid` 等布局容器进行布局管理。通过本篇文章,您将学会如何灵活运用布局容器,设计美观且实用的用户界面。

weixin_56595425的博客 1527

Vivado IP核与License许可全解析:从免费到收费,从评估到部署

本文全面解析Vivado IP核与License许可机制,从免费到收费IP核的选型指南到License的申请与部署策略。详细介绍了Xilinx官方IP核的优势与局限,第三方IP核的风险与应对,以及实战中的资源优化技巧和版本兼容性问题,帮助开发者高效利用Vivado工具链。

weixin_29169505的博客 367

C#(C Sharp)学习笔记_多态【十九】

在编程语言和类型论中,多态()指为不同数据类型的实体提供统一的接口。多态类型()可以将自身所支持的操作套用到其它类型的值上。多态是面向对象编程(OOP)的一个基本概念,是面向对象的三大特征之一。它允许不同的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。在C#中,多态主要通过继承和接口实现。本文将探讨多态的基本概念、实现方式以及在C#中的一些实际应用。多态性可以定义为允许不同类的对象对同一消息做出响应的能力,但具体响应取决于消息接收者的实际类型。

追求细节,成就完美 1509

支付逻辑漏洞的八大姿势(上篇)

学习支付漏洞,看这篇文章!!!文章来源:SecHub网络安全社区(本资料仅供学习参考,严禁使用者进行未授权渗透测试!严禁任何形式的转载!

qq_39493066的博客 1358

16G显存+llama.cpp跑大模型的黄金配置指南

大语言模型(LLM)本地部署的核心瓶颈在于显存与推理效率的平衡。llama.cpp作为轻量级C/C++推理引擎,通过GGUF模型格式、量化压缩(如Q4_K_M)和CUDA底层优化,显著降低GPU资源需求。在消费级硬件中,16G显存成为兼顾模型能力(如Qwen3-4B、Llama-3-8B)、长上下文支持(4K token)与系统稳定性的关键阈值。它既规避了12G显存的容量焦虑,又绕开了24G高端卡的成本与散热负担,特别适合Windows 11原生环境下的生产级AI应用,如RAG、智能客服与文档分析。

weixin_32629853的博客 405

C#开发笔记之14-如何用C#计算闰年?

本文由比特飞原创发布,欢迎大家踊跃转载。 转载请注明本文地址:https://www.byteflying.com/archives/3410。 C#开发笔记概述 概述 闰年是公历中的名词。闰年分为普通闰年和世纪闰年。 普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如2004年就是闰年); 世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年); 闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数...

比特飞 2090

逆向实战:Soul聊天协议加密与Frida绕过检测技术解析

本文详细解析了Soul聊天协议的逆向工程实战,重点介绍了使用Frida绕过检测技术的具体方法。通过IDA和JADX进行静态分析,结合Frida动态调试,揭示了数据加密与解密的核心逻辑,并提供了完整的逆向工作流和实用技巧,帮助开发者深入理解协议逆向过程。

weixin_29260291的博客 926

C#学习笔记(十九):字典

自定义泛型 泛型类,第一替代符T,第二替代符U using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace m1w4d5_dictionary { cla...

weixin_30872867的博客 130

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

threadX的USBX的初始化和解初始化的分析。

tx_application_define的最后会使用tx_byte_pool_create创建usb线程的内存空间“ux_device_app_byte_pool”,再创建usb线程,也就是执行。主要就是创建了线程,也就是第3个参数app_ux_device_thread_entry,这个参数内是MX_USB_Device_Init,也就是USB底层初始化。进来的参数只有1个,是memory_ptr,这个就是创建的usb线程空间“ux_device_app_byte_pool”

qq_31885403的博客 647

C# in Unity官方教程笔记

C# Unity入门。

weixin_47637853的博客 2222

手把手教你学simulink实例--基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台

电动汽车的动力总成(Powertrain)是车辆的核心系统,包括动力电池、电机控制器、逆变器和驱动电机等关键部件。动力总成的控制策略直接影响车辆的动力性能、能耗效率和驾驶体验。为了验证和优化这些控制策略,基于MATLAB/Simulink的仿真平台成为一种高效且经济的解决方案。本项目旨在构建一个完整的基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台,涵盖控制策略建模、性能评估以及参数标定等功能模块,并通过仿真验证系统的有效性。

MHD0815的博客 299

C#(Csharp)笔记十九——C# 类(Class)

当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。...

qq_44544908的博客 611

【单点登录】SSO单点登录sa-token接入流程详解

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

Hello, New World! 1789

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C#零基础从入门到精通】(十九)——C#字典详解

在 C# 中,字典是一种非常实用的数据结构,用于存储键值对(Key - Value Pairs),它允许通过键(Key)快速查找对应的值(Value)。C# 中主要使用 Dictionary 泛型类来实现字典功能,下面将从多个方面详细介绍 C# 字典。

qq_3517289697的博客 626

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

学习c#的第十九天

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。通过在自定义特性类上应用 AttributeUsage 特性,可以定义该特性可以应用到哪些程序元素上,以及是否允许多次应用同一个特性。在这个类中,你可以添加自定义的属性和方法,以便存储和处理声明性的信息。在这个示例中,Serializable 是一个特性,它被应用到 MyClass 类上,为这个类添加了序列化的能力。

m0_74293254的博客 325

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C#笔记(十九)——委托和事件

课堂练习 using System; using System.Collections.Generic; namespace Lesson13_3 { //张三:初版按钮的实现 /*class Button { ...

dietao8966的博客 158

visual C#(十九)枚举集合

参考书:《 visual C# 从入门到精通》 第三部分 用C#定义可扩展类型 第19章 枚举集合 文章目录19.1 枚举集合中的元素19.1.1 手动实现枚举器19.1.2 实现`IEnumerable`接口19.2 用迭代器实现枚举器19.2.1 一个简单的迭代器19.2.2 使用迭代器为Tree<TItem>类定义枚举类 19.1 枚举集合中的元素 我们前面用foreach语句来方便的遍历集合,实际上foreach语句只能遍历可枚举集合,就是实现了System.Collections.IE

xhh22900的博客 477

左耳听风 第十九周

左耳听风 第十九周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS) Algorithm 针对「队列」的知识点进行了一些练习 LeetCode 20. 有效的括号 LeetCode 739. 每日温度 LeetC...

码农在途的博客 268

C#(十九)之抽象类abstract

C#中的抽象类(abstract)。 1:抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 2:抽象类不能被实例化 3:抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 4:具体派生类必须覆盖基类的抽象方法 5:抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。 6:抽象类中的非抽象方法,如果该方法是静态...

camellia的博客 417

十九 C# 泛型

1、泛型概述 泛型(Generics)是将类型作为参数传递给类、结构、接口和方法,这些参数通常被称作站位符,是类、就结构、接口和方法所存储或使用的一个或多个类型的占位符。 泛型集合是可以将类型参数用作它所存储的对象的类型的占位符:类型参数作为其字段的类型和其方法的参数类型出现。 泛型方法可以将其类型参数用作其返回值的类型或者其参数的类型之一。 泛型为开发者提供了一种高性能的编程方式,能够提高代码的重用性,并允许开发者别写非常有效的解决防范。 使用泛型可以提高性能,其中显著的一个改进是.NET框架组件不会在

Mwyldnje2003的博客 1185

C#学习笔记

C#学习笔记

xfeng20的博客 275

C#学习笔记(十九)类的声明和访问级别

类的声明: 声明一个类:创建一个类。class-declaration 创建一个对象、创建一个类的实例、实例化一个类。 当我们说类时:是声明一个类。 当我们说对象时:是创建一个类的实例,创建一个对象。 声明类的位置: 名称空间内声明类。 绝对不推荐:把类放在所有显式名称空间之外。(看起来像是所有名称空间以外,但是其实c#还有一个叫global的名称空间。) 类体里面。作为一个:成员类。 在C#与Java中,声明即定义。 但是在C++,声明和定义是分开的。C++编译器和链接器:多处使用一个

xiaoyaolangwj的博客 371

csharp高级练习题:九十九九九九九【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

csharp高级练习题:九十九九九九九【难度:3级】: 编写一个带数字的方法,并以英文返回该数字的字符串.例如 number_to_english(27)#=>'二十七' number_to_english(27)#=>'二十七' 晶 number_to_english(27)#=>'二十七' numberToEnglish(27)// =>'二十七' 您的...

景越c#经典编程题库(csharp programming training) 214

C# 探险之旅:第六十九节 - Lambda的前世今生

Lambda表达式是C#中的一颗明珠,它不仅简化了代码,还为函数式编程、LINQ查询、异步编程等高级功能提供了强大的支持。从最初的匿名方法到今天的Lambda表达式,C#的演变历程见证了编程语言的不断进步。

caifox的博客 1227
上一篇: C#正课十八
下一篇: C#正课二十
ctrl_v助手
博客等级 码龄4年 16粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值