WinForms零基础进阶控件教程(超实用详细版)

2024-04-13 17:12

本文主要是介绍WinForms零基础进阶控件教程(超实用详细版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 树型控件TreeView
    • 常用属性
    • 常用事件
    • 添加、删除树节点
    • 通过代码添加树节点
    • 通过代码删除树节点:
    • 管理节点图标
    • 响应事件,获取选中节点
  • 列表视图ListView
    • 常用属性
    • 常用事件
    • 添加、删除项
    • 使用ListViewItem集合编辑器添加,删除项:
    • 通过代码添加 / 删除项
    • 响应事件,获取选中项目内容。
    • 结合右键实现删除以及视图切换
      • 删除菜单响应代码:
      • 各种视图菜单响应代码:
  • 数据显示DataGridView
    • 绑定数据到控件
    • 根据内容自动调整控件size
    • AutoSizeColumnsMode属性
  • 音乐播放控件MediaPlayer
    • Winform添加打开MediaPlayer控件:
    • 常用属性及方法
  • 总结

在上一篇博客中,我们介绍了WinForms基础控件的使用。今天,我们将深入探讨更高级的控件,包括树型控件(TreeView)、列表视图(ListView)和数据显示控件(DataGridView),以及音乐播放控件(MediaPlayer)。我们将通过实际代码示例,帮助大家更好地理解和应用这些控件。

树型控件TreeView

TreeView控件用于显示具有层次结构的数据。它由层叠的节点(Node)分支构成,每个节点由图像标签组成。节点可以展开或折叠,显示其子节点。

常用属性

  • Name: 获取或设置控件的名称。
  • Dock: 控件在父容器中的停靠方式。
  • Nodes: TreeView控件根节点集合。
  • SelectedNode: 获取或设置当前TreeView控件中选定的树节点。
  • ImageList: 获取或设置TreeView中所使用的图像集。

常用事件

  • AfterCollapse: 在折叠树节点后触发。
  • AfterExpand: 在展开树节点后触发。
  • AfterSelect: 在更改选中节点后触发。
  • Click: 在点击TreeView控件时触发。

添加、删除树节点

我们可以通过两种方式添加、删除树节点:

  1. TreeNode编辑器中添加、删除树节点。

在这里插入图片描述
2. 通过代码添加、删除树节点。

通过代码添加树节点

窗体添加Load事件,在事件处理函数中编码添加树节点

private void Form_Load(object sender, EventArgs e)
{//方案一:使用TreeNode对象进行添加节点// 创建根节点TreeNode root = new TreeNode("北京**********学院");// 将根节点添加至TreeView控件上this.tvSchool.Nodes.Add(root);// 创建专业节点TreeNode tnPro1 = new TreeNode("电子与电气");TreeNode tnPro2 = new TreeNode("电子商务");// 将专业节点添加至根节点root.Nodes.Add(tnPro1);root.Nodes.Add(tnPro2);// 创建课程节点TreeNode tnCourse1 = new TreeNode("C#");TreeNode tnCourse2 = new TreeNode("SQL SERVER");// 将课程节点添加至专业节点tnPro1.Nodes.Add(tnCourse1);tnPro1.Nodes.Add(tnCourse2);// 展开TreeView的所有节点this.tvSchool.ExpandAll();
//方案二:使用键值对的方式进行添加节点
private void TreeViewForm1_Load(object sender, EventArgs e)
{this.tvSchool.Nodes.Add("001", "北京**********学院");this.tvSchool.Nodes["001"].Nodes.Add("001001", "电子与电气");this.tvSchool.Nodes["001"].Nodes.Add("001002", "电子商务");this.tvSchool.Nodes["001"].Nodes["001001"].Nodes.Add("001001001","C#");this.tvSchool.Nodes["001"].Nodes["001001"].Nodes.Add("001001002", "SQL SERVER");this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.Add("001002001", "搜索引擎优化");this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.Add("001002002", "网络营销推广");this.tvSchool.ExpandAll();
}

通过代码删除树节点:

例如在上面添加的节点中删除"搜索引擎优化"节点

//通过节点对象删除
this.tvSchool.Nodes.Remove(tnCourse3);
//通过索引下标删除
this.tvSchool.Nodes[0].Nodes[1].Nodes.RemoveAt(0);
//通过键删除节点
this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.RemoveByKey("001002001");

管理节点图标

为了在TreeView的节点中使用图标,我们需要借助ImageList控件。首先向窗体中添加ImageList控件,并向其中添加需要的图片。然后将ImageList控件与TreeView控件进行关联
给节点设置图标有两种情况:

  1. 所有节点图标都一样

此时直接在属性栏中或者通过代码找到TreeView控件,设置ImageIndex属性(未选中的展示图片索引)和SelectedImageIndex属性(选中情况下的图片索引)。
在这里插入图片描述

  1. 节点的图标不一致
  • 通过编辑器添加的节点,直接在编辑中为每个节点设置ImageIndex属性和SelectedImageIndex属性。
    在这里插入图片描述

  • 通过代码,使用TreeNode对象添加的节点,在代码中为每个TreeNode设置ImageIndex属性和SelectedImageIndex属性。下面代码只为一个节点添加了图标,其他节点省略。

//方案一:
TreeNode root = new TreeNode("北京**********学院",0,1);
//方案二:
TreeNode root = new TreeNode("北京**********学院");
root.ImageIndex = 0;
root.SelectedImageIndex = 1;

  • 通过代码,使用键值对的方式添加的节点,在代码中为每个TreeNode设置ImageIndex属性和SelectedImageIndex属性。下面代码只为一个节点添加了图标,其他节点省略。
//方案一:
this.tvSchool.Nodes.Add("001", "北京**********学院",0,1);
//方案二:
this.tvSchool.Nodes.Add("001", "北京**********学院");
this.tvSchool.Nodes["001"].ImageIndex = 0;
this.tvSchool.Nodes["001"].SelectedImageIndex = 1;

响应事件,获取选中节点

为TreeView控件添加AfterSelect事件,节点被选中后触发,在事件处理函数中,获取选中节点,并提示其标签文本值和key。

TreeNode selectedNode = this.tvSchool.SelectedNode;
//如果在添加节点的时候,并不是以键值对的方式添加的或者没有设置Name值,那么selectedNode.Name里面是空字符串
MessageBox.Show(selectedNode.Text + "," + selectedNode.Name);

在这里插入图片描述
注意,运行时窗体会先弹出目前所选(或上次停留的节点),点击弹窗的按键后,窗体会“消失”,但实际上未关闭,点击下方任务栏中窗体的图标,即可选择其他节点展示。

列表视图ListView

ListView控件可以展示多项数据,每一项均为ListViewItem对象,每个ListViewItem对象中包含SubItems属性表示该项中所有子项的集合。

常用属性

属性说明
Name控件的名称
Dock控件在父容器中的停靠方式
Items包含控件中所有项的集合
Columns控件中显示的所有列标题的集合
View控件的显示视图
LargeImageList当控件以大图标视图显示时使用的ImageList
SmallImageList当控件以小图标视图显示时使用的ImageList
GridLines在包含控件中的行和列之间是否显示网格线
MultiSelect是否可以选择多项
SelectedItems获取在控件选定的项
FullRowSelect单击某项是否选择其所有子项

常用事件

  • Click: 在单击ListView控件时触发。
  • SelectedIndexChanged: 当选定项发生更改时触发。

添加、删除项

我们可以通过两种方式添加、删除项:

  1. 使用ListView编辑器添加、删除项。

  2. 使用代码为ListView添加、删除项。

ListView控件具有5种显示视图,由View属性设置,View属性的值及说明见下表:

属性值说明
Details详细视图,标准的二维表格,第一行为表头
LargeIcon(默认值)大图标,每一项显示为一个大图标
SmallIcon小图标,每一项显示为一个小图标
List列表,每项显示一行
Tile平铺,显示大图标,并在右侧显示详细信息

使用ListViewItem集合编辑器添加,删除项:

实现步骤:

(1)创建窗体,并向其中拖入ListView控件

(2)设置ListView控件的Dock属性在父容器中停靠。

(3)向ListView控件中添加,删除列。

(4)设置ListView控件的显示视图为Detail,此时可以看到列标题
注意:编辑列之后 Details 视图才能正常显示

(5)向ListView控件中添加,删除项(点击右上角三角,编辑项)

(6)添加ListViewItem项目,在text属性中设置第一列内容,在SubItems里面设置其他列内容。

注意:如果该项数据有图片,需要拖入两个ImageList控件,分别存储大图标和小图标的图片。

在这里插入图片描述

  • 点击ListView控件右上角三角,使用LargeImageList\SmallImageList属性将ListView控件与两个ImageList控件关联。
  • 然后直接在该项ListViewItem上设置ImageIndex属性设置图片的索引。

特别注意:如果ListView与ImageList关联,ListView的Detail视图中的行高会随着小图标视图的ImageList的图像高度而改变。而且取消与ImageList的关联后也无法还原,此时可以通过设置ImageList的图像大小来控制行高。

通过代码添加 / 删除项

private void Form_Load(object sender, EventArgs e)
{// 创建ListViewItem对象,设置text值(第一列的值)ListViewItem item1 = new ListViewItem("安琪拉");item1.Name = "itemAjl"; // 设置当前项的名字item1.ImageIndex = 0;  // 设置图标索引// 设置除第一列外其他列数据item1.SubItems.Add("超弱");item1.SubItems.Add("中等");item1.SubItems.Add("超强");item1.SubItems.Add("难");this.lvTimi.Items.Add(item1);// 下面同理,添加其他项// ......
}
//直接通过ListViewItem对象名删除
this.lvTimi.Items.Remove(item1);
//通过索引小标删除
this.lvTimi.Items.RemoveAt(0);
//通过键值对中的键删除,此处的键就是ListViewItem对象的name
this.lvTimi.Items.RemoveByKey("itemAjl");

响应事件,获取选中项目内容。

设置FullRowSelect属性为true,保证单击某项整行选中效果,选择ListView控件的DoubleClick(双击)事件,编写如下代码:

ListViewItem item = this.lvTimi.SelectedItems[0];
if (item == null)return;
string result = "";
result += "名字:" + item.Text + "\n";
result += "生存能力:" + item.SubItems[1].Text +"\n";
result += "攻击伤害:" + item.SubItems[2].Text + "\n";
result += "技能效果:" + item.SubItems[3].Text + "\n";
result += "上手难度:" + item.SubItems[4].Text + "\n";
MessageBox.Show(result);

结合右键实现删除以及视图切换

拖入ConTextMenuStrip控件,制作如下菜单,并设置ListView控件的ContextMenuStrip属性用来关联ListView控件和ContextMenuStrip控件:
在这里插入图片描述

删除菜单响应代码:

private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{if (this.lvTimi.SelectedItems.Count == 0){MessageBox.Show("您没有选中项目!");return;}ListViewItem item = this.lvTimi.SelectedItems[0];this.lvTimi.Items.Remove(item);
}

各种视图菜单响应代码:

private void 大图标ToolStripMenuItem_Click(object sender, EventArgs e)
{this.lvTimi.View = View.LargeIcon;
}private void 小图标ToolStripMenuItem_Click(object sender, EventArgs e)
{this.lvTimi.View = View.SmallIcon;
}private void 详细ToolStripMenuItem_Click(object sender, EventArgs e)
{this.lvTimi.View = View.Details;
}private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)
{this.lvTimi.View = View.List;
}private void 平铺ToolStripMenuItem_Click(object sender, EventArgs e)
{this.lvTimi.View = View.Tile;
}

数据显示DataGridView

DataGridView控件是一个强大的数据显示和用户输入控件。它允许用户编辑、更新和排序数据。

属性说明
DataSource要显示的数据集 (源)
ValueMember绑定处理程序标识,给程序员看的
DisplayMember绑定显示的数据,一般是显示给客户看的

绑定数据到控件

DataTable dataTable = new DataTable();
this.dataGridView1.DataSource = dataTable;

根据内容自动调整控件size

private void AutoSizeTable()
{int height = dataGridView1.Height;int width = 0;foreach (DataGridViewColumn col in dataGridView1.Columns){width += col.Width;}width += dataGridView1.RowHeadersWidth;width = (width > 650) ? 650 : width;dataGridView1.ClientSize = new Size(width + 2, height + 2);
}

在这里插入图片描述

AutoSizeColumnsMode属性

更改datagridview的column的AutoSizeMode

成员名称说明
None列宽不会自动调整
AllCells调整列宽,以适合该列中的所有单元格的内容,包括标题单元格
AllCellsExceptHeader调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格
ColumnHeader调整列宽,以适合列标题单元格的内容
DisplayedCells调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格
DisplayedCellsExceptHeader调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格
Fill调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在MinimumWidth 属性值以上。相对列宽由相对 FillWeight 属性值决定

音乐播放控件MediaPlayer

MediaPlayer控件可以用于播放音频和视频文件。

Winform添加打开MediaPlayer控件:

  1. 工具箱,右键单击选择项点击顶部的Com组件
  2. 向下拉勾选Windows Media Player
    在这里插入图片描述

常用属性及方法

  • music.URL: 设置播放文件的路径。
  • music.Ctlcontrols.currentPosition: 获取播放的当前位置。
  • music.Ctlcontrols.Play: 播放。
  • music.Ctlcontrols.Stop: 停止播放。
  • music.Ctlcontrols.Pause: 暂停播放。
  • music.settings.volume: 设置音量。
  • axWindowsMediaPlayer1.settings.rate: 播放速率。

注意: 该控件的URL必须是绝对路径。


在这里插入图片描述

总结

以上就是本次WinForms零基础进阶教程的全部内容。希望能帮助大家更好地掌握这些控件的使用。在实际开发中,这些控件非常强大,可以构建出功能丰富的桌面应用程序。如果有任何问题,欢迎在评论区留言讨论!

如果觉得文章还不错,可以点赞、收藏和转发,以支持作者继续创作更多教程。 另外本专栏将会持续更新,作者专栏中有已经更新完毕的C#基础教程!!!

这篇关于WinForms零基础进阶控件教程(超实用详细版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900733

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)