1、VB.NET 期末大作业单机播放器的制作学 院: 计算机科学学院 专 业: 计算机科学与技术 班 级: 一班 姓 名: 学 号: 日 期: 2014 年 12 月 7 日 注:这里只列出设计控件,代码详见源代码文档一、 设计目的设计一款单机版的播放器,练习并熟练掌握 课堂上学习到的知识。相关知识包括 数据类型的使用和转换以及强制数据类型转换、选择结构与循环结构的使用、数组与字符串、过程与异常处理的练习、相关控件(包括 label控件、timer 控件、tooltip 控件、textbox 控件等等)的使用、鼠标事件的应用、数据库的链接与访问、多项目开发、多媒体播放。二、 设计思想及关键技术
2、我的作业中共设计了 7 个窗体和一个模块,他们分别被命名为frmloading,frmadduser,frmloadrunning,frmVmediaplayer,frmabout ,frmsetusermsg,frmcrystal_reports 和模块 mdl。下面分别讲解他们的作用以及附着在他们上面的控件的作用。1、 frmloading:(1)各个控件及其名字:还有隐藏的控件:Picmarklblmarkbtncolor btnadduser btnloading btnexit mainpanelbtnuserbooklblname cbxnametbxkeylblkeybtnbac
3、kcolorckxkeepname ckxexittkbRedtkbGreentkbBlueckbcolor lblRedlblGreenlblBluePicshow btnxgpxcolorset(2)控件属性设置Name Text 其他Form Frmloading Formborderstyle 设置为 NonePicturebox Picmark 添加了一张图片Button btncolor 添加了一张图片,Flatstyle 设置为 flatButton btnadduser 注册用户 背景为 transparent,flatstyle 为 flatButton btnloading
4、 登录 背景为 transparent,flatstyle 为 flatButton btnexit 退出 背景为 transparent,flatstyle 为 flatPanel mainpanel 背景添加了一张图片Label lblmark V 播放器Button btnuserbook 使用说明 背景为 transparent,flatstyle 为 flatLabel lblname 用户名: 背景为 transparentCombobox cbxnameLabel lblkey 密码: 背景为 transparentTextbox tbxkeyCheckbox ckxkeepna
5、me 记住账户 背景为 transparentCheckbox ckxexit 退出提醒 背景为 transparentButton btnbackcolor 背景色: 背景为 transparent,Flatstyle 设置为 flatCheckbox ckbcolor 随机颜色 背景为 transparentLabel lblRed 设置了背景色Picturebox PicshowButton btnx 添加了一张图片,Flatstyle 设置为 flatTrackbar tkbRed 设置了背景色Trackbar tkbGreen 设置了背景色Trackbar tkbBlue 设置了背景
6、色Label lblGreen 设置了背景色Label lblBlue 设置了背景色Groupbox gpxcolorset 背景设置Timer Timadduser 程序控制 enabled 和 intervalTooltip Tooltip1Timer Timcolor 程序控制 enabled 和 intervalTimer Timcolorgroup 程序控制 enabled 和 interval(3)关键技术:.1 利用 timer 控件实现动画效果有 frmadduser 出现、gpxcolorset 的出现和消失、随机颜色的实现。.2 当 ckxkeepname 被勾选,并成功登
7、陆后,程序会自动将用户名和密码记录入数据库usermsg 的表 usermsg2 中。当以后再次登陆时,cbxname 失去光标的时候,程序会检查数据库 usermsg 的表 usermsg2 的 USERID 字段,如果 cbxname.text 在 usermsg2 中有记录,则在 tbxkey 中自动输入密码,实现保存的用户自动登录的效果。具体实现的时候,首先如果用户选择了“记住账户” ,就将此用户名保存到表 usermsg2 中,我用 datatable 来把表usermsg2 中的已经记住的用户名拿出来放到数组中,以便和输入的用户名作对比,当用户第二次登录的时候,如果在表 userm
8、sg2 中的话,就说明之前“记住账户”过了,所以,这时在表一中把用户名对应的密码拿出来,完成自动输出密码。.3 利用函数 random 产生了三个 0255 的随机数给 RGB,然后利用 timer 实现颜色的随机变换。.4 利用 System.Diagnostics.Process.Start()实现打开 word 文档,利用了动态路径就不用怕路径找不到的情况了。.5 退出提醒被勾选后,当点击退出时,会弹出一个是否退出的提醒对话框。这是利用msgbox 函数实现的动态窗体。.6 利用 Trackbar 将 Trackbar.value 的值给 RGB 实现手动控制窗体背景色2、 frmadd
9、user(1) 各个控件及其名字:隐藏控件有:(2)控件属性设置Name Text 其他Form Frmadduser Formborderstyle 设置为 NonePicturebox picmark 添加了一张图片Label lbluser 用户名: 背景为 transparentLabel lblkey 密码: 背景为 transparentLabel Lblkey2 确认密码: 背景为 transparentGroupbox gpxchoose 选填项目Label lblbirthday 生日: 背景为 transparentLabel lblsex 性别: 背景为 transpar
10、entLabel lbljobs 职业: 背景为 transparentButton btnadd 立即注册 Flatstyle 设置为 flatLabel lblmark 注册新用户 背景为 transparentButton btnx 添加了一张图片,Flatstyle 设置为 flatCombobox cbxuserpicmark lblmark btnxcbxusertxbkey1Txbkey2dtpbirthrbtwomanrbtmanlbxjobbtncloselbluserlblkeyLblkey2gpxchooselblbirthdaylblsexlbljobsbtnaddTe
11、xtbox txbkey1 Passwordchar 设置为 *Textbox Txbkey2 Passwordchar 设置为 *Datetimepicker dtpbirth Value 设置为 2000/1/1 星期六Radiobuttn rbtwoman 女 背景为 transparentRadiobuttn rbtman 男 背景为 transparentListbox lbxjobTooltip Tooltip1Button btnclose 取消 Flatstyle 设置为 flat(3)关键技术:.1 当确认密码栏 txbkey2 失去光标时,与密码栏 txbkey.text
12、对比一下,如果不一样,则提示“两次密码不一样” 。这个虽然简单,但是这是我第一次发现LostFocus这个事件,当时发现了很高兴,项目的其他地方也有用到这个事件。.2 点击注册用户后,首先判断一下用户名栏、密码栏和确认密码栏是否都填写。前面的问题都正确了以后开始判断正在注册的用户名是否已经注册过了,如果没有则注册新用户。这个方法与之前的“记住账号”原理一样,就是利用datatable 将所有用户名拿出来放到数组中,然后和输入的用户名对比,如果存在,就提示“用户已被注册” ,如果没有就将所有信息存入数据库中。3、 frmloadrunning(1)各个控件及其名字:隐藏控件有:(2)控件属性设置
13、Name Text 其他Form Frmloadrunning Formborderstyle 设置为 NoneLabel lblloadnum 背景为 transparentLabel lblloadword 正在登陆,请稍后 背景为 transparentTimer Timloadrunning 程序控制 enabled 和 interval(3)关键技术此窗体用于在登录成功后做一个缓冲,不然显得播放器突然跳出来一样。.1 利用 timer 控制 lblloadnum 上的数字每 10ms 加 1.2lblloadnum 上的数字加到 100 后开始加载窗体 frmVmediaplayer
14、,并关闭窗体 frmloadinglblloadnumlblloadword和窗体 frmloadfunning4、 frmVmediaplayer(1) 各个控件及其名字:*基本信息框中的控件有:*用户信息框中控件有:picmarkbtn 一btnopenfilebtnchoose1lblnamepichandlblmarklistboxbtnlistbtnxbtn 口 1,btn 口 2tabpanellbltimepicshowlistpichidelist pic_mesize btnsplitterListpanelAxWindowsMediaPlayer1gpxsetpanel_b
15、tnhelppanel_btnusermsgpanel_btnsetbtnbackcolor ckbcolorlblBluelblGreenlblRedpicShowtkbBlue tkbGreen tkbRed*帮助系统框中控件有:*隐藏的控件有:(2) 控件属性设置Name Text 其他Form frmVmediaplayer Formborderstyle 设置为 NonePicturebox picmark 添加了一张图片Label lblmark V 播放器Picturebox pichand Dock 设置为 top,背景为 TransparentLabel Lblname 背景
16、为 TransparentButton btnchoose1 添加了一张图片,Flatstyle 设置为 flatButton btnopenfile 添加了一张图片,Flatstyle 设置为 flatgpxusermsg lblusername1gpxhelplblusernamelblbirthdaylbljobsbtnmsgsetbtnuserdatelblsexbtnreportbtnaboutbtnfeedbackbtnusehelplblwebbtndeleteuserButton btn 一 添加了一张图片,Flatstyle 设置为 flatButton btn 口 1 添加
17、了一张图片,Flatstyle 设置为 flatButton btn 口 2 添加了一张图片,Flatstyle 设置为 flatButton btnx 添加了一张图片,Flatstyle 设置为 flatButton btnlist 播放列表Listbox listboxPanel tabpanel Dock 设为 rightAxWindowsMediaPlayerAxWindowsMediaPlayerLabel lbltimePicturebox picshowlist 添加了一张图片Picturebox pichidelist 添加了一张图片Picturebox pic_mesize
18、添加了一张图片,背景设置为 blackButton btnsplitt Cursor 设置为 VSplitPanel Listpanel*基本信息框中的控件属性设置:此处与窗体 frmloading 的部分控件一样,故此不在赘述,这里是列出不一样的控件。如有需要,请参照窗体 frmloadingName Text 其他Button panel_btnset 基本设置 Flatstyle 设置为 flatButton panel_btnusermsg 用户信息 Flatstyle 设置为 flatButton panel_btnhelp 帮助系统 Flatstyle 设置为 flatGroupb
19、ox gpxset 基本设置*用户信息框中控件属性设置:Name Text 其他Label lblsex 性别: 背景为 TransparentLabel lblbirthday 生日: 背景为 TransparentLabel lbljobs 职业: 背景为 TransparentButton btnmsgset 更改信息 Flatstyle 设置为 flatButton btnuserdate 客户数据表 Flatstyle 设置为 flatGroupbox gpxusermsg 用户信息Label lblusername1 用户: 背景为 TransparentButton btndel
20、eteuser 注销用户 Flatstyle 设置为 flatLabel lblusername 背景为 Transparent*帮助系统框中控件属性设置:Name Text 其他Groupbox gpxhelp 帮助系统Label lblweb 官方网站:背景为 TransparentButton btnusehelp 使用帮助 Flatstyle 设置为 flatButton btnfeedback 反馈意见 Flatstyle 设置为 flatButton btnabout 关于我们 Flatstyle 设置为 flatButton btnreport 举报 Flatstyle 设置为
21、flat*隐藏的控件属性设置:(3) 关键技术.1 大部分控件都是通过代码控制的大小和位置,包括窗体大小的变化时的大小和位置变化。麻烦主要是因为一个控件的大小由几个事件控制,其控制曲折复杂难以想象,反正我是不想在看那些控制大小的代码了。.2 点击设置按钮 btnchoose1 将换回到初始界面,这里最难得就是各个控件大小及位置的控制,本来应该很简单,但是考虑到还有几个控件隐藏与显示的后,大小应该也要变化,因此变得不简单。.3 利用控件 OpenFileDialog1 打开所需要的影音材料。.4 用两个 picturebox(pic 口 1,pic 口 2)实现了窗体最大化和还原,先记住最大化前
22、的位置和大小,然后点击还原后再对应的赋值给我的窗体的大小和位置。这里也要考虑到变化后各个控件大小及位置的变化情况。在实现这个效果的时候,我没有用 Maximized因为遇到了个问题,不是我想要的(我忘了那个问题了,反正 Maximized 后有我不想要的东西),所以我就自己让窗体的长宽等于屏幕的长宽。.5 用 listbox 作为播放器的播放列表。这里专门为它建立了一个数据库,用于存放已经播放过的影音材料:如果是第一次播放,则将名称和地址存放在数据库里,然后单击已经播放过的名称(也就是 listbox 里的项)就可以直接播放了。具体实现是,在 openFileDialog1打开影音材料时,就将
23、材料的名字和路径保存到数据库 moviemsg 中,然后再单击已经播放过的材料时就可以根据路径直接播放了。.6 用 button 做成一个 splitter 的样子,并具有 splitter 的功能,即可以左右移动来改变右边播放列表和左边视频窗口的大小。至于我为什么不直接用 splitter,是因为它存在一些问题,不能满足我的需要。.7 用两个 picturebox(picshowlist ,pichidelist)实现播放列表的隐藏和显示。当我在设置其他控件大小和位置时,这个功能给我造成了不小的麻烦,也是麻烦的主要来源。.8 利用 timer 控件实现影音材料播放时长的显示,就是每隔 100
24、ms 刷新一次材料播放的当前位置(这个当前位置是控件 AxWindowsMediaPlayer1本来就有的,只是它没有显示,而且它最小单位是秒,但是它不会像秒表一样动,需要一个事件让他刷新一下,所以我就 100ms 刷新一次,反正在观众看来它只不过是一秒一动。) 。.9 窗体的移动:当鼠标左键按下的时候,记住光标和窗体上边缘和左边缘的两个距离,然后再光标拖动窗体的过程中让那两个距离不改变即可,也就是光标移动后,为了保持那两个距离不变,则窗体也要跟着移动。这样就实现了窗体的移动。.10 窗体的大小:当光标处于右下角黑色图片处时,光标由箭头变成了西北-东南双向箭头,实现原理与窗体移动差不多。首先记住窗体原点到屏幕上边缘和左边缘的两个距离 a b,当鼠标左键按下的拖动时候,光标移动到哪儿,