用C#和WinForms打造你的专属视频播放器:从多格式支持到全屏播放的完整指南
使用 C# 和 WinForms 创建一个功能齐全的视频播放器,支持 MP4 和 AVI 格式,并具有文件夹导入、多视频播放、全屏切换、视频列表管理等功能,是一个相对复杂的项目。下面我会给出一个基本的实现方案,包括所需的关键功能和相关代码示例。
1. 创建 WinForms 应用程序
首先,创建一个新的 WinForms 项目。在 Visual Studio 中,选择 “创建新项目”,然后选择 “Windows 窗体应用 (.NET Framework)” 或 “Windows 窗体应用 (.NET Core)”。
2. 安装必要的 NuGet 包
为了播放视频,我们需要一个支持 MP4 和 AVI 的视频播放器组件。VLC.DotNet 是一个不错的选择,它是基于 VLC 媒体播放器的封装。
打开 NuGet 包管理器控制台,然后运行以下命令来安装 VLC.DotNet 包:
Install-Package Vlc.DotNet.Forms
3. 设计界面
在 WinForms 设计器中,添加以下控件:
Panel用于显示视频。ListBox用于显示视频列表。Button用于导入视频文件夹。ContextMenuStrip用于右键菜单操作(添加、删除视频)。Button用于全屏切换。
4. 实现功能
4.1. 初始化 VLC 播放器
在代码中初始化 VLC 播放器并配置它。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Vlc.DotNet.Forms;
using Vlc.DotNet.Core;namespace VideoPlayer
{public partial class MainForm : Form{private VlcControl vlcControl;private List<string> videoFiles = new List<string>();private int currentIndex = -1;public MainForm(){InitializeComponent();InitializeVlcControl();}private void InitializeVlcControl(){vlcControl = new VlcControl();vlcControl.Dock = DockStyle.Fill;vlcControl.VlcLibDirectory = new System.IO.DirectoryInfo(@"C:\Program Files\VideoLAN\VLC"); // VLC 安装路径vlcControl.EndInit();this.Controls.Add(vlcControl);}}
}
4.2. 导入视频文件夹
添加文件夹导入功能,将选定文件夹中的所有视频添加到列表中。
private void btnImportFolder_Click(object sender, EventArgs e)
{using (var folderDialog = new FolderBrowserDialog()){if (folderDialog.ShowDialog() == DialogResult.OK){var files = System.IO.Directory.GetFiles(folderDialog.SelectedPath, "*.*", System.IO.SearchOption.AllDirectories);foreach (var file in files){if (file.EndsWith(".mp4") || file.EndsWith(".avi")){videoFiles.Add(file);listBoxVideos.Items.Add(file);}}}}
}
4.3. 播放视频
播放选定的视频,并支持全屏模式切换。
private void PlayVideo(string filePath)
{vlcControl.SetMedia(new Uri(filePath));vlcControl.Play();this.Text = System.IO.Path.GetFileName(filePath);
}private void listBoxVideos_SelectedIndexChanged(object sender, EventArgs e)
{if (listBoxVideos.SelectedItem != null){PlayVideo(listBoxVideos.SelectedItem.ToString());}
}private void btnFullscreen_Click(object sender, EventArgs e)
{this.FormBorderStyle = FormBorderStyle.None;this.WindowState = FormWindowState.Maximized;vlcControl.Dock = DockStyle.Fill;
}
4.4. 右键菜单操作
添加右键菜单功能以支持视频的添加和删除。
private void listBoxVideos_MouseUp(object sender, MouseEventArgs e)
{if (e.Button == MouseButtons.Right){var index = listBoxVideos.IndexFromPoint(e.Location);if (index != ListBox.NoMatches){listBoxVideos.SelectedIndex = index;contextMenuStrip1.Show(listBoxVideos, e.Location);}}
}private void addVideoToolStripMenuItem_Click(object sender, EventArgs e)
{// 实现视频添加功能
}private void deleteVideoToolStripMenuItem_Click(object sender, EventArgs e)
{if (listBoxVideos.SelectedItem != null){videoFiles.Remove(listBoxVideos.SelectedItem.ToString());listBoxVideos.Items.Remove(listBoxVideos.SelectedItem);}
}
4.5. 拖放调整视频顺序
支持通过拖放操作调整视频顺序。
private void listBoxVideos_DragOver(object sender, DragEventArgs e)
{e.Effect = DragDropEffects.Move;
}private void listBoxVideos_DragDrop(object sender, DragEventArgs e)
{var point = listBoxVideos.PointToClient(new Point(e.X, e.Y));var index = listBoxVideos.IndexFromPoint(point);if (index >= 0 && index < listBoxVideos.Items.Count){var selectedItem = (string)listBoxVideos.SelectedItem;videoFiles.Remove(selectedItem);videoFiles.Insert(index, selectedItem);listBoxVideos.Items.Remove(selectedItem);listBoxVideos.Items.Insert(index, selectedItem);listBoxVideos.SelectedIndex = index;}
}
5. 代码整理
确保将以上功能模块整合到你的 Form 类中,并进行适当的 UI 布局调整。
6. 测试和调试
完成以上步骤后,进行充分的测试,确保所有功能正常运行。测试包括:
- 视频播放是否流畅
- 文件夹导入功能是否正常
- 全屏切换是否有效
- 视频列表的添加、删除和拖放功能是否按预期工作
总结
这个示例代码涵盖了一个基本的视频播放器的实现,包括导入、播放、全屏、列表管理等功能。你可以根据需要进一步扩展功能或改进界面。
相关文章:
用C#和WinForms打造你的专属视频播放器:从多格式支持到全屏播放的完整指南
使用 C# 和 WinForms 创建一个功能齐全的视频播放器,支持 MP4 和 AVI 格式,并具有文件夹导入、多视频播放、全屏切换、视频列表管理等功能,是一个相对复杂的项目。下面我会给出一个基本的实现方案,包括所需的关键功能和相关代码示…...
Spring security学习笔记
目录 1. 概要2. spring security原理2.1 DelegatingFilterProxy2.2 FilterChainProxy2.3 SecurityFilterChain2.4 Spring Security 作用机制 3.Spring Security快速入门4.高级自定义配置5. Spring Security 结合 JWT使用 1. 概要 Spring Security是一个用于在Java应用程序中实…...
MySQL:基础增删查改
MySQL:基础增删查改 插入插入冲突 查询distinctwhereorder bylimit 删除deletetruncate 更新 插入 基本插入语法: insert [into] 表名 (列1, 列2 ...) values (值1, 值2 ...);into可以省略(列1, 列2 ...)与后面的(值1, 值2)一一对应如果插入时数据完全…...
Apache DolphinScheduler 1.3.4升级至3.1.2版本过程中的踩坑记录
因为在工作中需要推动Apache DolphinScheduler的升级,经过预研,从1.3.4到3.1.2有的体验了很大的提升,在性能和功能性有了很多的改善,推荐升级。 查看官方的升级文档,可知有提供升级脚本,如果只是跨小版本的…...
最后一块石头的重量(超级妙的背包问题)
1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果…...
如何评估和提升审查者在前端代码审查中的专业技能?
评估和提升审查者在前端代码审查中的专业技能可以通过以下步骤: 技能评估: 定期进行技能评估,了解审查者在前端开发各方面的能力,包括但不限于HTML、CSS、JavaScript、框架使用、代码规范等。 代码审查实践: 通过实…...
C++(区别于C的)基础内容总结
参考: C 教程 | 菜鸟教程 (runoob.com) 简介 C 被认为是一种中级语言,它综合了高级语言和低级语言的特点。 C 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言,最初命名为带类的C&…...
实现代码灵活性:用Roslyn动态编译和执行存储在数据库中的C#代码
在许多现代应用程序中,动态编译和执行代码是提升灵活性和功能的一种强大技术。本文将介绍如何使用Roslyn编译器平台动态编译和执行存储在数据库中的C#代码,并结合实际公司案例来说明这些技术的应用场景。 1. 引言 在很多应用场景中,我们可能…...
探索哈希表:C++中的实现与操作详解【Map、Set、数据结构】
探索哈希表:C中的实现与操作详解 介绍 哈希表(Hash Table)是一种常见的数据结构,它提供了一种高效的键值对存储方式,能够快速进行插入、删除和查找操作。在这篇博客中,我们将详细介绍哈希表的概念、在C中的…...
Python酷库之旅-第三方库Pandas(062)
目录 一、用法精讲 241、pandas.Series.view方法 241-1、语法 241-2、参数 241-3、功能 241-4、返回值 241-5、说明 241-6、用法 241-6-1、数据准备 241-6-2、代码示例 241-6-3、结果输出 242、pandas.Series.compare方法 242-1、语法 242-2、参数 242-3、功能 …...
python学习之旅(基础篇看这篇足够了!!!)
目录 前言 1.输入输出 1.1 输入 1.2 输出 2. 变量与常量 2.1 变量 2.2 常量 2.3 赋值 2.4格式化输出 3. 数据类型 4. 四则运算 5.“真与假” 5.1 布尔数 5.2 比较运算和逻辑运算 5.3 布尔表达式 6.判断语句 6.1 基本的if语句 6.2 if-else语句 6.3 if-elif-el…...
Azure OpenAI Embeddings vs OpenAI Embeddings
题意:Azure OpenAI 嵌入与 OpenAI 嵌入的比较 问题背景: Is anyone getting different results from Azure OpenAI embeddings deployment using text-embedding-ada-002 than the ones from OpenAI? Same text, same model, and the results are cons…...
重生奇迹MU职业成长三步走
在重生奇迹MU游戏中,转职是最重要的玩法之一。每个职业在转职后都会发生巨大的变化,经过三次转职后,你才有资格成为该游戏中最强大的冒险者。 一转,一切才刚刚开始 玩家完成第一次转职任务后,标志着我们成功度过了游…...
2024年中国数据中台行业研究报告
数据中台丨研究报告 核心摘要: 数据中台是企业数字化建设的重要构成,其通过整合企业基础设施和数据能力,实现数据资产化和服务复用,降低运营成本,支撑业务创新。受宏观经济影响,部分企业减少了对数据中台等…...
MySQL——数据表的基本操作(一)创建数据表
数据库创建成功后,就需要创建数据表。所谓创建数据表指的是在已存在的数据库中建立新表。需要注意的是,在操作数据表之前,应该使用 “ USE 数据库名 ” 指定操作是在哪个数据库中进行,否则会抛出 “ No database selected ” 错误。创建数据表…...
EPLAN EDZ 文件太大导入很慢如何解决?
目前各个品牌都在提供 EPLAN EDZ部件库文件,但是一般都是一个总的EDZ文件,导入过程中,因为电脑配置和其他问题,导致导入过程中EPLAN会崩溃或者长时间不动。 我们分析下EDZ文件的构成,这是个压缩文件,换了个壳而已。用压缩软件把edz打开,这里不是解压,直接右键,用解压…...
刷题——缺失的第一个正整数
缺失的第一个正整数_牛客题霸_牛客网 我选择了一个我比较能看懂的, int minNumberDisappeared(vector<int>& nums) {// write code heremap<int, int>hash;int n nums.size();//哈希表记录数组中出现的每个数字for(int i 0; i < n; i)hash[n…...
代理设置--一些库的代理设置
首先最好能获取一个免费代理,来继续下面的阅读和实验 也可以在本机设置代理,具体流程由于比较敏感,请自行搜索 代理设置成功后的测试网站是 http://www.httpbin.org/get , 访问该链接可以得到请求相关的信息,返回结果中的 ori…...
Debezium系列之:PostgreSQL数据库赋予账号数据采集权限的详细步骤
Debezium系列之:PostgreSQL数据库赋予账号数据采集权限的详细步骤 一、账号需要的权限二、创建账号,赋予登陆、复制权限三、赋予账号数据库权限四、赋予账号对表的权限五、创建PostgreSQL数据库复制组六、账号权限授予完整案例七、扩展——分区表设置八、扩展-撤销账号的权限…...
javascript:判断输入值是数字还是字母
1 代码示例 要判断输入值是数字还是字母,我们可以通过JavaScript获取输入框的值,然后使用isNaN函数来检查输入值是否为数字。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><s…...
OpenClaw+GLM-4.7-Flash:个人博客内容自动生成与发布
OpenClawGLM-4.7-Flash:个人博客内容自动生成与发布 1. 为什么选择这个技术组合 去年夏天,我发现自己陷入了写作瓶颈——每周要产出3篇技术博客,但80%的时间都消耗在资料收集和格式调整上。直到发现OpenClawGLM-4.7-Flash这个组合ÿ…...
域环境基础知识
Active Directory(AD) 域控制器功能: 集中管理所有域用户统一身份认证组策略分发资源访问控制 Windows Server域环境搭建 推荐版本: Windows Server 2003Windows Server 2008Windows Server 2012 域环境组成: 域控制器…...
用过才敢说 AI论文平台测评:2026年最值得尝试的几款工具
2026年真正好用的AI论文平台,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...
云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本)
云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本) 在当今快节奏的软件开发环境中,自动化部署已成为提升团队效率的关键环节。阿里云云效平台提供的流水线功能,为开发者提供了一套完整的CI/CD解决方案ÿ…...
MVC / MVVM 和 Vue3、React18 到底啥关系?
MVC / MVVM 和 Vue3、React18 到底啥关系? 我用最直白、最贴合你日常写代码的方式讲清楚,保证你瞬间通透。一、先给结论(最重要) Vue3 标准的 MVVM 框架(官方自己定义的)React18 借鉴 MVVM 思想ÿ…...
保姆级教程:在Jeecg-Vue3项目中快速集成SuperQuery高级查询组件(含完整配置代码)
Jeecg-Vue3项目实战:SuperQuery高级查询组件深度集成指南 在后台管理系统开发中,高效的数据筛选功能直接影响用户体验和操作效率。Jeecg-Vue3作为企业级快速开发框架,其内置的SuperQuery组件能够帮助开发者快速构建复杂的多条件查询面板。本文…...
智能客服架构图实战:从高并发设计到生产环境部署
今天想和大家聊聊智能客服系统的架构实战。我们团队最近刚把一个老的单体客服系统重构为微服务架构,主要就是为了应对大促期间的高并发访问。整个过程踩了不少坑,也积累了一些经验,在这里做个梳理和分享。 先说说我们遇到的痛点。原来的系统&…...
NaViL-9B效果展示:电商主图自动提取卖点文案+竞品对比分析
NaViL-9B效果展示:电商主图自动提取卖点文案竞品对比分析 1. 多模态大模型惊艳登场 想象一下,当你上传一张商品图片,AI不仅能准确识别图片内容,还能自动生成吸引人的卖点文案——这就是NaViL-9B带来的革命性体验。作为原生多模态…...
嵌入式开发调试与问题诊断实战指南
嵌入式工程师常见问题诊断与调试经验分享1. 典型开发场景分析1.1 开发环境差异问题"在我的开发环境运行正常"是嵌入式工程师最常遇到的困境之一。这种现象通常源于:编译器版本差异(GCC/Keil/IAR版本不一致)硬件平台差异(…...
NCMDump解密工具:3步解锁网易云音乐加密文件,实现跨平台自由播放
NCMDump解密工具:3步解锁网易云音乐加密文件,实现跨平台自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?NCMDump是一款专…...
