WinForm_初识_事件_消息提示

文章目录

  • WinForm开发环境的使用
    • 软件部署的架构
      • B/S 架构应用程序
      • C/S 架构应用程序
  • 创建 Windows 应用程序
    • 窗口介绍
    • 查看设计窗体 Form1.cs 后台代码
    • 窗体 Form1.cs
    • 窗体的常用属性
  • 事件驱动机制
    • 事件的应用
    • 事件的测试
    • 测试事件的级联响应
    • 常用控件的事件
    • 事件响应的公共方法
  • 消息提示的用法
    • 为什么要使用消息框
    • 使用
    • 参数格式
    • MessageBoxButtons 属性 样式
    • MessageBoxIcon属性 样式
    • 示例

WinForm开发环境的使用

WinForms,作为 .NET Framework 中用于创建 Windows 应用程序的用户界面的一部分,提供了丰富的控件组件,极大地便利了桌面应用程序的开发。本篇文章将深入探讨 WinForms 中的事件驱动机制和消息提示框的使用方法,旨在帮助开发者更好地理解和运用这些基础知识,以提升开发效率和改善程序的用户体验。

本专栏会持续更新Winform相关教程,可以订阅追更 !!!

软件部署的架构

B/S 架构应用程序

  • B/S 架构应用程序(Web应用程序):浏览器/服务器(Browser/Server)
    • 浏览器将请求发送给Web服务器,Web服务器对请求进行处理,将响应的数据发回浏览器。
    • 应用程序全部部署在服务器端,客户端只有浏览器。
    • 对应各大公司的官网 Web 开发。
         ┌───────────────┐       ┌───────────────┐│   客户端      │       │   Web服务器   ││   (浏览器)    ├──────>│                ││               │       │   应用程序     ││               │       │   数据处理     ││               │       │   业务逻辑     │└───────────────┘       └───────────────┘││▼┌──────────────┐│   数据库     │└──────────────┘
    

C/S 架构应用程序

  • C/S 架构应用程序( Windows、WinForm、桌面应用程序):客户端/服务器( Client/Server )
    • 客户端向服务器发出请求,服务器处理请求并将响应发送给客户端。
    • 应用程序全部或部分部署在客户端,数据库或部分程序在服务器端。
         ┌───────────────┐       ┌───────────────┐│   客户端       │       │   服务器端     ││   (Windows App│       │   应用程序     ││   或桌面App)   ├──────>│   数据处理     ││               │       │   业务逻辑     │└───────────────┘       └───────────────┘││▼┌──────────────┐│   数据库     │└──────────────┘

创建 Windows 应用程序

在 Visual Stuido 中创建 Windows 应用程序的步骤:

  1. 打开 VS2022 或者 其他版本

  2. 创建新项目在这里插入图片描述

  3. 项目类型: Visual C#项目

  4. 模板: Windows应用程序在这里插入图片描述

  5. 配置新项目(设置项目名称、保存的路径、以及.net framework版本)
    在这里插入图片描述

窗口介绍

  1. 菜单区域在这里插入图片描述

  2. 工具栏在这里插入图片描述

  3. 编辑区(可以根据需求,调整大小)在这里插入图片描述

  4. 工具箱(可以尝试拖几个控件到我们的编辑区)在这里插入图片描述

  5. 属性区(可以修改控件的属性和行为)在这里插入图片描述

    • 如果找不到属性窗口:视图 -> 属性窗口(W) F4
  6. 窗体的设计文件(稍后会详细讲解)在这里插入图片描述

  7. 窗体的资源文件在这里插入图片描述

  8. 应用程序的主入口点 Program.cs(将来根据需求,修改里面的代码)在这里插入图片描述

  9. 应用程序的引用在这里插入图片描述

  10. 程序集信息
    在这里插入图片描述

运行项目(可在解决方案右键在资源管理器中显示,找到 Debug 文件中的 exe 文件)。

查看设计窗体 Form1.cs 后台代码

快捷键:选择 Form1.cs + F7
快捷键:再次摁下 shift + F7 可还原窗体

窗体 Form1.cs

选择 Form1.cs + F7,打开后台代码。

冒号在 C# 中有两种特殊的含义:1.类的继承 2.接口的实现。当前类 Form1 是继承自窗体类 Form,自动的就拥有了 Form 类里面相关的属性方法

把窗体 Form1 的名字修改一下,一般主窗体命名为:FrmMain。在这里插入图片描述

FrmMain.cs 中的 partial(部分的) 和 FrmMain.Designer.cs 中的 partial
一样,不是一个类的修饰符,是限定这个类本身的组成部分,叫做部分类。当程序在编译和运行时,会把 FrmMain.cs 中的 FrmMain
类和 FrmMain.Designer.cs 中的 FrmMain 类会编译成一个类。

可以自己在资源管理上右键添加一个新的类(默认图标变成了窗体小图标,因为它就是窗体类,它是继承于 Form 类的):在这里插入图片描述

在 FrmMain.cs 的构造函数中调用窗体的设计 Form1.Designer.cs。

partial class FrmMain
{void test(){//如果想使用cw,在项目右键属性->应用程序输出类型->控制台应用程序Console.WriteLine("测试部分类");}
}
打开 Form1.Designer.cs 代码文件,这个文件其实就是窗体 Form1 对应的代码文件。我们在窗体 Form1 上拖拽的控件最终都要在这里生成对应的代码模块。public FrmMain()
{this.test();InitializeComponent();
}

打开 Form1.Designer.cs 代码中 Windows窗体设计器生成的代码'这个代码块,我们看到里面有对这个窗体的代码(// Form1/FrmMain),有对按钮设计的代码(// button1)。当我们选择窗体或者按钮,在右边属性面板修改对应控件的属性时(比如:标题 Text、背景图片 Image),对应模块的代码就会发生变化。

总结:窗体由两部分构成:窗体的直接代码 Form1.cs 和设计器生成的代码 Form1.Designer.cs,一般 Form1.Designer.cs 的代码我们不需要去动它。

ps:Form1.Designer.cs 中的InitializeComponent方法,是在 Form1.cs 的构造函数中调用的。(当然你可以把 InitializeComponent 中的代码直接粘贴到 Form1.cs 的构造函数中)

窗体的常用属性

选中窗体,找到右边的属性面板。前两个按钮可以选择排序方式:按分类顺序和按字母顺序(都可以)

按字母顺序:

  • Name 属性:控件的 id,Name 属性必须唯一,不能和其他控件相冲突。
  • Text 属性:窗体的标题(win7默认靠左,win8默认在中间,win10默认靠左,可代码修改见下方)
  • MaximizeBox:控制窗体的最大化是否能被点击(双击或者在属性值框都可以修改它的值)
  • WindowState:设置窗体是否自动最大化
    • Normal:正常状态
    • Minimized:启动时窗体最小化
    • Maximized:启动时窗体最大化
  • StartPosition:确定窗体第次出现时的位置。
    • Manual:窗体的位置由location属性确定。可以自己设置相应位置,其代码如下:
      this.StartPosition = FormStartPosition.Manual;
      this.Location = new Point(100,200);//x=100,y=200
      
    • CenterScreen:窗体上当前显示居中显示,并且具有指定的窗体的大小的尺寸。适合用于一个窗口。
    • WindowsDefaultLocation:窗体定位在Windows默认位置,并且具有指定的窗体的大小的尺寸。一般默认为这个。
    • WindowsDefaultBounds:窗体定位在Windows默认位置,其边界也由Windows默认决定。
    • centerparent:窗体在其父窗体的边界内居中。适合于多个窗体,各个窗体之间嵌套。
  • FormBorderStyle:窗口的边框样式,一般在设计时就要确定下来。用户自由调节窗体的大小,会破坏窗体控件布局的美观性,所以我们要禁用窗机大小的调节。
    • None:将窗口设置为无边框、无标题栏。用户无法改变窗口的大小,也无法改变窗口显示的位置;
    • FixedSingle:将窗口设置为固定的单框(窄框),用户无法用鼠标拖动边框改变窗口的大小,但可以通过最大化按钮将窗口最大化、最小化按钮将最小化;
    • Fixed3D:将窗口设置为固定框,3D风格,用户无法用鼠标拖动边框改变窗口的大小,但可以通过最大化按钮将窗口最大化、最小化按钮将最小化。窗口的工作区具有凹陷3D效果;
    • FixedDialog:将窗口设置为固定框,对话框风格,用户无法用鼠标拖动边框改变窗口的大小,但可以通过最大化按钮将窗口最大化、最小化按钮将最小化;
    • Sizable:正常窗口样式,用户可以拖拽大小(默认选项)
    • FixedToolWindow:将窗口设置为固定框,工具窗口风格,用户无法用鼠标拖动边框改变窗口的大小;工具窗口风格的特点是:标题栏高度比较小,且只有关闭按钮
    • SizableToolWindow:和上面风格一样,只是用户可以拖拽大小
  • Icon:窗体左上角的图标。注意图片必须是 .ico 格式的图片 IconFinder
  • Size:控件的大小(以像素为单位)。有 Width 和 Height 构成(整形)
  • Font:用于显示控件中文本的字体。
  • BackgroundImage:用于该控件的背景图像。
  • BackColor:组件的背景色。

ps:选中(点击)每个属性,在下面小窗体中都有对应的解释说明。

ps:在win7和win10设置标题居中的代码方法:

public FrmMain()
{test();InitializeComponent();SetTitleCenter();
}private void SetTitleCenter()
{// 先确随便写一个标题的内容:string titleMsg = "Winfrom Title";// 获取对Graphics对象的引用:Graphics g = this.CreateGraphics();// 根据Graphics对象来计算标题的开始居中位置:Double startingPoint = (this.Width / 2) - (g.MeasureString(titleMsg, this.Font).Width / 2);// 计算一个空字符所占像素长度:Double widthOfASpace = g.MeasureString(" ", this.Font).Width;// 定义一个空字符串来用作为标题之前做占位:String tmp = " ";// 定义一个初始占位像素:Double tmpWidth = 0;// 循环遍历,将startingPoint之前的像素都用空字符代替:while ((tmpWidth + widthOfASpace) < startingPoint){tmp += " ";tmpWidth += widthOfASpace;}// 最后将标题字符跟换:this.Text = tmp + titleMsg;
}

事件驱动机制

事件的应用

计算机中的事件

  • 鼠标按下、键盘按下、鼠标移入移出移动、输入框的文本内容变化…

事件的作用

  • windows系统通过事件处理来响应用户的请求,在没有用户请求之前,事件处于静止等待状态。
    在这里插入图片描述

事件的组成
在这里插入图片描述

提前设置好一个事件(.NET平台设计) ,然后根据需要添加一个事件处理程序(开发者自定义) ,最后将“事件本身”和“处理程序”连接起来(后台自动关联)当用户操作引发事件的时候(比如单击按钮、双击图标等) ,自动调用事件处理程序完成相应任务。

事件的测试

创建一个新的 Windows 窗体应用(.Net FrameWork)项目,把默认窗体 Form1.cs 更名为 FrmMain.cs。

  • 窗体的标题可以更名为:事件的测试,把窗体的位置 StartPosition 设置为屏幕的中央。

  • 打开工具箱,随便拖拽一个按钮 Button,并修改其相关属性

  • Text:修改为“测试按钮的事件”

  • Name:相当于控件的 id,必须是唯一的,修改为“btnTest”。(其实对应的就是修改了FrmMainDesigner.cs 中的代码,在 FrmMainDesigner.cs 中给我们拖拽的按钮生成了代码并定义了变量:private System.Windows.Forms.Button button1;当我们修改了 Name 属性后,对应的变量名就发生了变化:private System.Windows.Forms.Button btnTest;这就是为什么要唯一的原因了:变量名不能重复)

  • 找到属性面板中的事件标签,选中自己要实现的事件类型。比如单击事件 Click,双击 Click 属性,就能在 FrmMain.cs 代码中帮你生成事件的回调函数。

  • 如何删除这个按钮的事件:找到属性面板中的 Click 属性,右键选择重置即可。

  • 另外一种生成事件的回调函数方式:双击窗体中的按钮,默认会生成按钮 的单击 Click 事件。(其他控件基本也是一样的,通过双击一般会生成该控件常用的事件)

  • 注意:删除事件函数时,不能只单单删除 FrmMain.cs 中的事件代码,这个时候运行是会报错的。
    遇到程序报错不要害怕,一般双击第一个报错信息(原因:有时候会有一堆错误,后面的错误有可能是因为第一个主要的错误,导致后面那一系列的错误),就能找到报错的原因及报错的位置。

这里额外解释一下这句代码 this.btnTest.Click += new System.EventHandler(this.btnTest_Click);
这里的 btnTest.Click 是一个事件委托,通过 += 多播的形式,记录所有的点击事件。这里的 this.btnTest_Click 其实就是 FrmMain.cs 代码中生成的事件方法。

在 FrmMain.cs 中的 this.btnTest_Click 方法中加入:Console.WriteLine("点击了按钮"); 或者 MessageBox.Show("点击了按钮"); 点击测试。

再次体验一下 this.btnTest.Click += new System.EventHandler(this.btnTest_Click); 这句代码。

我们再拖拽一个按钮 Button。

  • Text:标题修改为“事件断开”
  • Name:修改为“BtnBreak”
    生成单击事件(双击按钮即可)
    在 BtnBreak 的事件方法中加入:this.btnTest.Click -= new System.EventHandler(this.btnTest_Click);

我们再拖拽一个按钮 Button。

  • Text:标题修改为“事件链接”
  • Name:修改为“BtnLink”在这里插入图片描述
//事件处理程序(函数)
//参数1: 绑定事件的这个控件
//参数2: 事件对象 不同的事件,拥有不同的事件对象
private void btnTest_Click(object sender, EventArgs e)
{Console.WriteLine("点击了按钮");MessageBox.Show("点击了按钮");
}生成单击事件(双击按钮即可)

ps:可以多点几次测试多播。

测试事件的级联响应

重点理解:sender 参数的含义及作用。

在窗体中再拖拽一个按钮 Button,命名Name为:BtnTestEvent,Text:测试事件的响应。

// FrmMain.cs
public partial class FrmMain : Form
{public FrmMain(){InitializeComponent();// 该方法可以直接从 FrmMain.Designer.cs 中剪切过来// 将按钮的单击事件和事件响应方法结合起来this.btnTest.Click += new System.EventHandler(this.btnTest_Click);}// 事件的响应方法private void btnTest_Click(object sender, EventArgs e){Console.WriteLine("点击了按钮");MessageBox.Show("点击了按钮");}private void BtnBreak_Click(object sender, EventArgs e){this.btnTest.Click -= new System.EventHandler(this.btnTest_Click);}private void btnLink_Click(object sender, EventArgs e){this.btnTest.Click += new System.EventHandler(this.btnTest_Click);}
}

ps:在窗体上按住 Ctrl + 拖拽某个控件,可以快速生成控件。

再生成三个按钮:

  • 命名Name为:btnAndy,Text:Andy老师
  • 命名Name为:btnCarry,Text :Carry老师
  • 命名Name为:btnCoco,Text:Coco老师

自己来实现一个单击事件:
给三个按钮添加同一个事件响应方法。

常用控件的事件

  • 窗体的重要事件:
    • Load :窗体加载事件(应用较少)
    • FormClosing:窗体关闭之前发生的事件
    • FormClosed:窗体关闭以后发生的事件
  • 文本框的重要事件:
    • TextChanged :文本框内容改变事件
    • KeyPress :用户按下某键并释放的时候发生的事件
    • MouseLeave :当鼠标离开文本框的时候发生
  • 下拉框的重要事件:
    • SelectedIndexChanged :当用户选择的下拉项改变的时候发生

事件响应的公共方法

private void btnTeacher_Click(object sender,EventArgs e)
{// sender// string text = (sender as Button).Text;string text = ((Button)sender).Text;MessageBox.Show(text);
}
public FrmMain()
{InitializeComponent();// 该方法可以直接从 FrmMain.Designer.cs 中剪切过来// 将按钮的单击事件和事件响应方法结合起来this.btnTest.Click += new System.EventHandler(this.btnTest_Click);// 给三个按钮添加同一个事件响应方法this.btnAndy.Click += new System.EventHandler(this.btnTeacher_Click);this.btnCarry.Click += new System.EventHandler(this.btnTeacher_Click);this.btnCoco.Click += new System.EventHandler(this.btnTeacher_Click);
}

消息提示的用法

为什么要使用消息框

  • 显示消息
  • 向用户请求信息。在这里插入图片描述在这里插入图片描述

合理使用消息提示框,因为每次弹出都需要用户去做处理,弹出的频率和次数过高,用户也是会感觉很反感的。现在大多数的提示后可以在界面上直接提示,比如:登录注册时,直接在文本框的后面显示红色小字提示。

使用

在窗体上拖拽一个按钮(在控件上直接右键找到属性菜单转到设置面板):Name: Text:测试消息框。
双击按钮,生成事件的响应方法: btnTestMsg_Click。方法内写上:MessageBox.Show(“Test”);

参数格式

MessageBox.Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)

官方: MessageBox.Show 官方文档

MessageBoxButtons 属性 样式

在这里插入图片描述

MessageBoxIcon属性 样式

在这里插入图片描述

示例

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 _03_消息提示
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){// 参数1: 提示信息// MessageBox.Show("弹出框");// 参数2:设置弹出框的标题// MessageBox.Show("弹出框", "窗口标题");// 参数3:设置一个MessageBoxButtons类型的枚举// 参数4:设置图标// 参数5:设置默认第几个按钮是默认选中的// MessageBox.Show("弹出框", "窗口标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2);// 返回值// 返回值是枚举类型,可以通过判断枚举的类型来进行下一步操作DialogResult res = MessageBox.Show("弹出框", "窗口标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2);if (res == DialogResult.Cancel){// 取消操作}else{// 确认操作}Console.WriteLine(res);}}
}

觉得本篇文章写的还不错可以点赞,收藏,关注。主页还有21天速通C#教程欢迎订阅!!!在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCIE-02-PPPoE

目录 实验条件网络拓朴实验目标 开始配置R1验证效果 实验条件 网络拓朴 实验目标 R2为PPPoE Server&#xff0c;已预配了相关信息&#xff1b;R1作为PPPoE Client&#xff0c;进行PPPoE拨号 用户名为R1&#xff0c;密码为cisco &#xff0c; 采用CHAP的认证方式&#xff0c;I…

算法学习——LeetCode力扣补充篇3(143. 重排链表、141. 环形链表、205. 同构字符串、1002. 查找共用字符、925. 长按键入)

算法学习——LeetCode力扣补充篇3 143. 重排链表 143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → …

Python学习笔记 - 如何在google Colab中显示图像?

这里是使用的opencv进行图片的读取&#xff0c;自然也是想使用opencv的imshow方法来显示图像&#xff0c;但是在google Colab中不可以使用&#xff0c;所以寻找了一下变通的显示方法。 方法1&#xff1a;使用matplotlib 使用plt需要交换一下r、b通道&#xff0c;否则显示不正常…

第十九章 UML

统一建模语言(Unified Modeling Language&#xff0c; UML )是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言&#xff0c;是非专利的第三代建模和规约语言。 UML 是面向对象设计的建模工具&#xff0c;独立于任何具体程序设计语言。 一、简介 UML 作为一…

正大国际:做qi货靠运气多点还是靠自己学习到认知度?

一个人能赚到自己认知范围以外的钱靠的是运气&#xff0c;能赚到自己认知范围内的钱靠的是能力。期货市场试错成本较高&#xff0c;交易自己熟悉和擅长的领域会大大降低失败概率。期货市场机会很多&#xff0c;陷阱也很多&#xff0c;如何坚持做认知范围内的决策是一个重要的交…

docker部署开源软件的国内镜像站点

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/le_monitor:latestdocker-compose部署 vim docker-compose.yml version: 3 services:le_monitor:container_name: le_monitorimage: registry.cn-beijing.aliyuncs.com/wuxingge123/le_monitor:latestpo…

算法——距离计算

距离计算常用的算法包括欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等。这些算法在数据挖掘、机器学习和模式识别等领域中被广泛应用。 1.欧氏距离 欧式距离也称欧几里得距离&#xff0c;是最常见的距离度量&#xff0c;衡量的是多维空间中两个点之间的…

心里健康(健康与生存)

你还认为 健康 是有个强壮的身体吗&#xff1f; 这样 肯定是错的 我们来说说 什么是健康与现代健康观 以及影响健康的因素 有哪些&#xff1f; 以及 健康对个人与社会的意义 首先 我们来看看 健康演变过程 公元 1000 年 Health 首次出现 它代表了 强壮 健全 完整等含义 健康 …

十四.PyEcharts基础学习

目录 1-PyEcharts介绍 优点&#xff1a; 安装: 官方文档&#xff1a; 2-PyEcharts快速入门 2.1 第一个图表绘制 2.2 链式调用 2.3 opeions配置项 2.4 渲染图片文件 2.5 使用主题 3-PyEcharts配置项 3.1 初始化配置项InitOpts InitOpts 3.2 全局配置项set_global_o…

京东云明修“价格战”,暗渡“政企云”

文&#xff5c;白 鸽 编&#xff5c;王一粟 云计算行业越来越“卷”&#xff0c;一边卷大模型&#xff0c;一边卷价格。 2024 刚一开年&#xff0c;阿里云就宣布百余款产品大降价&#xff0c;最高降幅达55%。在阿里云宣布降价后&#xff0c;京东云紧随其后宣布&#xff0…

80C51实现四种流水灯流水灯 | 自用学习笔记

单个流水灯 #include <reg51.h> #include <intrins.h> // 包含移位库函数的头文件void delay(void) // 定义延时函数 {unsigned char i, j;for(i 0; i < 200; i) // 循环延时&#xff0c;延时约50msfor(j 0; j < 125; j); }void main(void){ unsigned ch…

AcWing刷题-游戏

游戏 DP l lambda: [int(x) for x in input().split()]n l()[0] w [0] while len(w) < n:w l()s [0] * (n 1) for i in range(1, n 1): s[i] s[i - 1] w[i]f [[0] * (n 1) for _ in range(n 1)]for i in range(1, n 1): f[i][i] w[i]for length in range(2, …

[BT]BUUCTF刷题第13天(4.1)

第13天 Upload-Labs-Linux (Basic) Pass-01 根据题目提示&#xff0c;该题为绕过js验证。 一句话木马&#xff1a; <?php eval(system($_POST["cmd"]));?> // 符号 表示后面的语句即使执行错误&#xff0c;也不报错。 // eval() 把括号内的字符串全部…

rtsp协议详解-最详细的流媒体传输协议

流媒体传输协议-rtsp协议详解 rtsp RTSP出现以前&#xff0c;最热的大概就是HTTP协议。想象一下&#xff0c;当你需要欣赏网络中的某一段视频&#xff0c;通过HTTP协议访问其URL、开始下载、下载完成后播放。对于早期的视频采集设备、网络带宽或是负责渲染的显示器而言&#…

Redis中的复制功能(一)

复制 概述 在Redis中&#xff0c;用户可以通过执行SLAVEOF命令或者设置slaveof选项&#xff0c;让一个服务器去复制(replicate)另一个服务器&#xff0c;我们称呼被复制的服务器为主服务器(master)&#xff0c;而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示…

关于list的那些事

1.什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法具体如下所示 Iterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素遍历的&#xff0c;具体如…

深度学习| DiceLoss解决图像数据不平衡问题

图像数据不平衡问题 图像数据不平衡&#xff1a;在进行图像分割时&#xff0c;二分类问题中&#xff0c;背景过大&#xff0c;前景过小&#xff1b;多分类问题中&#xff0c;某一类别的物体体积过小。在很多图像数据的时候都会遇到这个情况&#xff0c;尤其是在医学图像处理的…

SSM框架学习——Spring的控制反转IoC与依赖注入DI

控制反转IoC与依赖注入DI 概念 提到Spring首先想到的肯定是Spring的IoC容器了。在了解Spring的用法之前我们必须了解什么是控制反转IoC和依赖注入DI。 **控制反转&#xff08;Inversion of Control&#xff09;**是面向对象编程中的一种设计原则&#xff0c;它建议将不需要的…

【软考】系统集成项目管理工程师(二十二)法律法规【2分】

一、合同法 1、内容 当事人的名称或者姓名和住所、标的、数量、质量、价款或者报酬&#xff1b;履行期限、地点和方式&#xff1b;违约责任和解决争议的方法 练一练 【例1-高16下】格式条款是当事人为了重复使用而预先拟定&#xff0c;并在订立合同时未与对方协商的…

内存泄漏检查工具下载(vld)

前言&#xff1a;在我们向内存申请动态空间的时候&#xff0c;如果使用完之后不将申请的空间释放&#xff0c;就会造成内存泄漏的情况&#xff0c;但是一般情况下&#xff0c;我们是无法通过运行代码来知道是否造成了内存泄漏&#xff0c;所以vld就成为了检查内存是否泄漏的好帮…