收藏 分销(赏)

单机播放器的制作vbnet期末大作业.doc

上传人:w****g 文档编号:2761500 上传时间:2024-06-05 格式:DOC 页数:49 大小:549KB 下载积分:12 金币
下载 相关 举报
单机播放器的制作vbnet期末大作业.doc_第1页
第1页 / 共49页
单机播放器的制作vbnet期末大作业.doc_第2页
第2页 / 共49页


点击查看更多>>
资源描述
VB.NET期末大作业 ——单机播放器的制作 学 院: 计算机科学学院 专 业: 计算机科学与技术 班 级: 一班 姓 名: 学 号: 日 期: 2014年12月7日 注:这里只列出设计控件,代码详见源代码文档 一、 设计目的 设计一款单机版的播放器,练习并熟练掌握课堂上学习到的知识。相关知识包括数据类型的使用和转换以及强制数据类型转换、选择结构与循环结构的使用、数组与字符串、过程与异常处理的练习、相关控件(包括label控件、timer控件、tooltip控件、textbox控件等等)的使用、鼠标事件的应用、数据库的链接与访问、多项目开发、多媒体播放。 二、 设计思想及关键技术 我的作业中共设计了7个窗体和一个模块,他们分别被命名为frmloading,frmadduser,frmloadrunning,frmVmediaplayer,frmabout,frmsetusermsg,frmcrystal_reports和模块mdl。下面分别讲解他们的作用以及附着在他们上面的控件的作用。 1、 frmloading: (1)各个控件及其名字: mainpanel btnloading btnadduser btnexit btncolor Picmark Picshow btnbackcolor tkbGreen ckbcolor lblGreen gpxcolorset ckxkeepname btnuserbook btnx lblBlue lblRed tkbBlue tkbRed ckxexit lblkey tbxkey cbxname lblname lblmark 还有隐藏的控件: (2)控件属性设置 Name Text 其他 Form Frmloading Formborderstyle设置为None Picturebox Picmark 添加了一张图片 Button btncolor 添加了一张图片,Flatstyle设置为flat Button btnadduser 注册用户 背景为transparent,flatstyle为flat Button btnloading 登录 背景为transparent,flatstyle为flat Button btnexit 退出 背景为transparent,flatstyle为flat Panel mainpanel 背景添加了一张图片 Label lblmark V播放器 Button btnuserbook 使用说明 背景为transparent,flatstyle为flat Label lblname 用户名: 背景为transparent Combobox cbxname Label lblkey 密码: 背景为transparent Textbox tbxkey Checkbox ckxkeepname 记住账户 背景为transparent Checkbox ckxexit 退出提醒 背景为transparent Button btnbackcolor 背景色: 背景为transparent,Flatstyle设置为flat Checkbox ckbcolor 随机颜色 背景为transparent Label lblRed 设置了背景色 Picturebox Picshow Button btnx 添加了一张图片,Flatstyle设置为flat Trackbar tkbRed 设置了背景色 Trackbar tkbGreen 设置了背景色 Trackbar tkbBlue 设置了背景色 Label lblGreen 设置了背景色 Label lblBlue 设置了背景色 Groupbox gpxcolorset 背景设置 Timer Timadduser 程序控制enabled和interval Tooltip Tooltip1 Timer Timcolor 程序控制enabled和interval Timer Timcolorgroup 程序控制enabled和interval (3)关键技术: .1利用timer控件实现动画效果有frmadduser出现、gpxcolorset的出现和消失、随机颜色的实现。 .2当ckxkeepname被勾选,并成功登陆后,程序会自动将用户名和密码记录入数据库usermsg的表usermsg2中。当以后再次登陆时,cbxname 失去光标的时候,程序会检查数据库usermsg的表usermsg2的USERID字段,如果cbxname.text在usermsg2中有记录,则在tbxkey中自动输入密码,实现保存的用户自动登录的效果。具体实现的时候,首先如果用户选择了“记住账户”,就将此用户名保存到表usermsg2中,我用datatable来把表usermsg2中的已经记住的用户名拿出来放到数组中,以便和输入的用户名作对比,当用户第二次登录的时候,如果在表usermsg2中的话,就说明之前“记住账户”过了,所以,这时在表一中把用户名对应的密码拿出来,完成自动输出密码。 .3利用函数random 产生了三个0~255的随机数给RGB,然后利用timer实现颜色的随机变换。 .4利用 System.Diagnostics.Process.Start()实现打开word文档,利用了动态路径就不用怕路径找不到的情况了。 .5退出提醒被勾选后,当点击退出时,会弹出一个是否退出的提醒对话框。这是利用msgbox函数实现的动态窗体。 .6利用 Trackbar将Trackbar.value的值给RGB实现手动控制窗体背景色 2、 frmadduser (1) 各个控件及其名字: btnadd lbljobs lblsex lblbirthday gpxchoose Lblkey2 lblkey lbluser btnclose lbxjob rbtman rbtwoman dtpbirth Txbkey2 txbkey1 cbxuser btnx lblmark picmark 隐藏控件有: (2)控件属性设置 Name Text 其他 Form Frmadduser Formborderstyle设置为None Picturebox picmark 添加了一张图片 Label lbluser 用户名: 背景为transparent Label lblkey 密码: 背景为transparent Label Lblkey2 确认密码: 背景为transparent Groupbox gpxchoose 选填项目 Label lblbirthday 生日: 背景为transparent Label lblsex 性别: 背景为transparent Label lbljobs 职业: 背景为transparent Button btnadd 立即注册 Flatstyle设置为flat Label lblmark 注册新用户 背景为transparent Button btnx 添加了一张图片,Flatstyle设置为flat Combobox cbxuser Textbox txbkey1 Passwordchar设置为 * Textbox Txbkey2 Passwordchar设置为 * Datetimepicker dtpbirth Value设置为2000/1/1星期六 Radiobuttn rbtwoman 女 背景为transparent Radiobuttn rbtman 男 背景为transparent Listbox lbxjob Tooltip Tooltip1 Button btnclose 取消 Flatstyle设置为flat (3)关键技术: .1当确认密码栏txbkey2失去光标时,与密码栏txbkey.text对比一下,如果不一样,则提示“两次密码不一样”。这个虽然简单,但是这是我第一次发现LostFocus这个事件,当时发现了很高兴,项目的其他地方也有用到这个事件。 .2点击注册用户后,首先判断一下用户名栏、密码栏和确认密码栏是否都填写。前面的问题都正确了以后开始判断正在注册的用户名是否已经注册过了,如果没有则注册新用户。这个方法与之前的“记住账号”原理一样,就是利用datatable将所有用户名拿出来放到数组中,然后和输入的用户名对比,如果存在,就提示“用户已被注册”,如果没有就将所有信息存入数据库中。 3、 frmloadrunning (1)各个控件及其名字: lblloadword lblloadnum 隐藏控件有: (2)控件属性设置 Name Text 其他 Form Frmloadrunning Formborderstyle设置为None Label lblloadnum 背景为transparent Label lblloadword 正在登陆,请稍后…… 背景为transparent Timer Timloadrunning 程序控制enabled和interval (3)关键技术 此窗体用于在登录成功后做一个缓冲,不然显得播放器突然跳出来一样。 .1利用timer控制lblloadnum上的数字每10ms加1 .2lblloadnum上的数字加到100后开始加载窗体frmVmediaplayer,并关闭窗体frmloading和窗体frmloadfunning 4、 frmVmediaplayer (1) 各个控件及其名字: AxWindowsMediaPlayer1 picshowlist Listpanel btn口1,btn口2 btnx btnopenfile btnchoose1 pichand tabpanel picmark lbltime listbox btnlist btn一 lblname lblmark pichidelist pic_mesize btnsplitter ***基本信息框中的控件有: btnbackcolor gpxset ckbcolor panel_btnset panel_btnhelp panel_btnusermsg tkbBlue tkbGreen tkbRed picShow lblBlue lblGreen lblRed ***用户信息框中控件有: btndeleteuser lblusername lblusername1 lblsex lblbirthday lbljobs btnmsgset btnuserdate gpxusermsg ***帮助系统框中控件有: gpxhelp btnfeedback btnreport btnabout btnusehelp lblweb ***隐藏的控件有: (2) 控件属性设置 Name Text 其他 Form frmVmediaplayer Formborderstyle设置为None Picturebox picmark 添加了一张图片 Label lblmark V播放器 Picturebox pichand Dock设置为top,背景为Transparent Label Lblname 背景为Transparent Button btnchoose1 添加了一张图片,Flatstyle设置为flat Button btnopenfile 添加了一张图片,Flatstyle设置为flat Button btn一 添加了一张图片,Flatstyle设置为flat Button btn口1 添加了一张图片,Flatstyle设置为flat Button btn口2 添加了一张图片,Flatstyle设置为flat Button btnx 添加了一张图片,Flatstyle设置为flat Button btnlist 播放列表 Listbox listbox Panel tabpanel Dock设为right AxWindowsMediaPlayer AxWindowsMediaPlayer Label lbltime Picturebox picshowlist 添加了一张图片 Picturebox pichidelist 添加了一张图片 Picturebox pic_mesize 添加了一张图片,背景设置为black Button btnsplitt Cursor设置为VSplit Panel Listpanel ***基本信息框中的控件属性设置: 此处与窗体frmloading的部分控件一样,故此不在赘述,这里是列出不一样的控件。如有需要,请参照窗体frmloading Name Text 其他 Button panel_btnset 基本设置 Flatstyle设置为flat Button panel_btnusermsg 用户信息 Flatstyle设置为flat Button panel_btnhelp 帮助系统 Flatstyle设置为flat Groupbox gpxset 基本设置 ***用户信息框中控件属性设置: Name Text 其他 Label lblsex 性别: 背景为Transparent Label lblbirthday 生日: 背景为Transparent Label lbljobs 职业: 背景为Transparent Button btnmsgset 更改信息 Flatstyle设置为flat Button btnuserdate 客户数据表 Flatstyle设置为flat Groupbox gpxusermsg 用户信息 Label lblusername1 用户: 背景为Transparent Button btndeleteuser 注销用户 Flatstyle设置为flat Label lblusername 背景为Transparent ***帮助系统框中控件属性设置: Name Text 其他 Groupbox gpxhelp 帮助系统 Label lblweb 官方网站: 背景为Transparent Button btnusehelp 使用帮助 Flatstyle设置为flat Button btnfeedback 反馈意见 Flatstyle设置为flat Button btnabout 关于我们 Flatstyle设置为flat Button btnreport 举报 Flatstyle设置为flat ***隐藏的控件属性设置: (3) 关键技术 .1大部分控件都是通过代码控制的大小和位置,包括窗体大小的变化时的大小和位置变化。麻烦主要是因为一个控件的大小由几个事件控制,其控制曲折复杂难以想象,反正我是不想在看那些控制大小的代码了。 .2点击设置按钮btnchoose1将换回到初始界面,这里最难得就是各个控件大小及位置的控制,本来应该很简单,但是考虑到还有几个控件隐藏与显示的后,大小应该也要变化,因此变得不简单。 .3 利用控件OpenFileDialog1打开所需要的影音材料。 .4用两个picturebox(pic口1,pic口2)实现了窗体最大化和还原,先记住最大化前的位置和大小,然后点击还原后再对应的赋值给我的窗体的大小和位置。这里也要考虑到变化后各个控件大小及位置的变化情况。在实现这个效果的时候,我没有用Maximized因为遇到了个问题,不是我想要的(我忘了那个问题了,反正Maximized后有我不想要的东西),所以我就自己让窗体的长宽等于屏幕的长宽。 .5用listbox作为播放器的播放列表。这里专门为它建立了一个数据库,用于存放已经播放过的影音材料:如果是第一次播放,则将名称和地址存放在数据库里,然后单击已经播放过的名称(也就是listbox里的项)就可以直接播放了。具体实现是,在openFileDialog1打开影音材料时,就将材料的名字和路径保存到数据库moviemsg中,然后再单击已经播放过的材料时就可以根据路径直接播放了。 .6用button做成一个splitter的样子,并具有splitter的功能,即可以左右移动来改变右边播放列表和左边视频窗口的大小。至于我为什么不直接用splitter,是因为它存在一些问题,不能满足我的需要。 .7用两个picturebox(picshowlist,pichidelist)实现播放列表的隐藏和显示。当我在设置其他控件大小和位置时,这个功能给我造成了不小的麻烦,也是麻烦的主要来源。 .8利用timer控件实现影音材料播放时长的显示,就是每隔100ms刷新一次材料播放的当前位置(这个当前位置是控件AxWindowsMediaPlayer1本来就有的,只是它没有显示,而且它最小单位是秒,但是它不会像秒表一样动,需要一个事件让他刷新一下,所以我就100ms刷新一次,反正在观众看来它只不过是一秒一动。)。 .9窗体的移动:当鼠标左键按下的时候,记住光标和窗体上边缘和左边缘的两个距离,然后再光标拖动窗体的过程中让那两个距离不改变即可,也就是光标移动后,为了保持那两个距离不变,则窗体也要跟着移动。这样就实现了窗体的移动。 .10窗体的大小:当光标处于右下角黑色图片处时,光标由箭头变成了西北-东南双向箭头,实现原理与窗体移动差不多。首先记住窗体原点到屏幕上边缘和左边缘的两个距离a b,当鼠标左键按下的拖动时候,光标移动到哪儿,me.width就等于光标位置减去左边缘的距离b,me.height就等于光标位置减去上边缘距离a .11用户信息的呈现是利用select的查询命令,在窗体加载的时候就查询出来。更改信息是利用了update更新命令,注销是利用了delete删除命令 .12窗体加载的时候就将登录用户的信息(除密码意外)查询出来。 5、 frmabout (1) 各个控件及其名字: Tbxmsg Pichand (2) 控件属性设置 Name 其他 Form Frmabout Formborderstyle设置为SizableToolWindow Picturebox Pichand 添加了一张图片 Textbox Tbxmsg Text设为V播放器 Build版本:1.0 陕西师范大学计算机科学学院学生个人保留所有权 (3)关键技术 本窗体用于当用户点击了“关于我们”而设置,没有代码。 6、 frmsetusermsg (1) 各个控件及其名字: btnusermsg lbxjob Rbtman rbtwomen dtpbirth lblusernam Btnx lblsetuserms Lbljobs Lblsex Lblbirthday lbluser picmark (2) 控件属性设置 由于此窗体与窗体frmadduser部分控件一样,此处只列出不同控件的属性设置,如果需要,请参照frmadduser。 Name Text 其他 Form Frmsetusermsg Formborderstyle设置为None Label lblsetuserms 更改用户信息 Label lblusernam Button btnusermsg 确认更改 Flatstyle设置为flat (3)关键技术 .1利用update更新数据库里客户信息 7、 frmcrystal_reports (1) 各个控件及其名字: CrystalReportViewer1 (2) 控件属性设置 Name Text 其他 Form frmcrystal_reports 客户数据表 CrystalReportViewer1 CrystalReportViewer1 Dock设置为fill (3)关键技术 .1练习使用了CrystalReportViewer1控件,关于路径问题,我理解的是数据库在debug里就不用担心路径找不到,但是打包安装之后好像不能用了。 8、 mdl (1) 关键技术 做了一个Public Function,用于解决个别窗体内单引号的问题。 代码如下: Public Function getsqlstr(ByVal str As String) As String Return Replace(str, "'", "''") End Function 三、 自我评价 无框架窗体的拖动问题。其中遇到的问题:1、很轻松就可以把窗体的框架去掉,但之后我就发现一个问题,这个窗体没了标题栏,要怎么拖动?通过查书和上网终于解决了拖动的问题。2、一个简简单单的窗体拖动的问题还真不少。大体做完了之后,运行的时候发现不仅左键可以拖动,右键也可以,好神奇。但是跟我们的习惯有冲突,最后在老师给我们的书P264中找到了答案。3、运行时还有一个问题,就是第一次按下去,在拖动的一瞬间窗体莫名其妙的往上平移了一段距离,虽然之后依然能继续拖动,但这个平移是不应该存在的。就这花了我个小时,看书,上网,最后才发现移动的向量里,Y多加了个标题栏的高,明明就把标题去掉了,怎么可能还存在这个高度! 上述问题是我在一个月前做的时候存在的问题,现在我又找到了另一个更简单易懂的方法。就是:当鼠标左键按下的时候,记住光标和窗体上边缘和左边缘的两个距离,然后再光标拖动窗体的过程中让那两个距离不改变即可,也就是光标移动后,为了保持那两个距离不变,则窗体也要跟着移动,这样就实现了窗体的移动。 新用户注册遇到的问题:1、在做一个信息录入(新用户注册)的功能的时候,在用insert into插入的时候,将相应变量对应到字段,老是提醒我说“insert into语句的语法错误”我对着insert into那句话看了两个小时,找了各种原因,符号错误的可能性最大,可就是找不出来哪儿错了。最后还是无意中发现生日的返回值是字符串,外层要加上单引号。2、我自己注册了很多组数据,在注册的过程中发现,注册已存在的用户名的时候程序就崩溃了,所以此处应该加上一个判断, 为了加这个判断, 我用到了书上的datatable来取得整个表, 然后就可以理所当然的利用datatable来获取数据总行数count和第i-1行第列(也就是用户名),再用数组的时候用的有点晕,感觉好像有问题,但我已经没有勇气检查了,因为程序能按照预想的结果走。3、还有个问题:dtpbirth.Value.Date(datetimepicker)的数据类型到底是什么?三个星期前我在录入信息的时候把它当做字符串是没有问题的,能成功录入,但现在它有提醒我说数据类型不匹配,最后我就只能把它强制类型转换成了字符串CStr(dtpbirth.Value.Date)。 最烦的一个问题就是关于播放器界面控件的大小及位置的问题,我用了大量的代码和大量的时间去实现这个。本来一般的可以用anchor属性来设置,但我的这个不适用,因为这个属性最多只让我实现控件随着窗体大小变化而变化,我想要的效果是点击btnchoose1就可以缩小到初始比例,然后单击两个页面中的一个就可以把那个界面放大充满窗口,并且也能满足控件随着窗体大小变化而变化。而且窗体上还有播放列表,这个表是可以隐藏和显示的,当它隐藏后,窗体就会多出来一部分width,这部分width应该被减掉,那么控件的大小是不是又应该跟着变化。几个事件可能都控制着同一个控件的大小和位置,这种情况我只能设置布尔类型的数据去控制它。 由于时间问题,此应用也存在着问题:播放列表目前只能单击已有的项播放,没有过多的其他操作,比如一般播放器都有的右键单击已有项后弹出菜单等等对播放列表的操作。 四、 参考来源及其他 五、 源代码 本软件共有7个窗体和一个模块: 1、 frmloading 2、 frmadduser 3、 frmloadrunning 4、 frmVmediaplayer 5、 frmabout 6、 frmsetusermsg 7、 frmcrystal_reports 8、 模块mdl 下面分别介绍他们的源代码: 1、 frmloading Imports System.Drawing Imports System.Windows.Forms Imports System.Data Imports system.Data.OleDb Public Class frmloading Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lblmark.Location = New Point(picmark.Width, picmark.Height / 2 - lblmark.Height / 2) Me.WindowState = FormWindowState.Maximized Timadduser.Interval = 50 Timadduser.Enabled = False mainpanel.Location = New Point(Me.Width / 2 - mainpanel.Width / 2, Me.Height / 2 - mainpanel.Height / 2) '对背景颜色初始化 gpxcolorset.Hide() timcolor.Enabled = True timcolor.Interval = 1000 timcolorgroup.Enabled = False timcolorgroup.Interval = 50 AddHandler tkbRed.Scroll, AddressOf DisplayRGB AddHandler tkbGreen.Scroll, AddressOf DisplayRGB AddHandler tkbBlue.Scroll, AddressOf DisplayRGB tkbRed.Value = 0 tkbGreen.Value = 192 tkbBlue.Value = 192 lblRed.Text = tkbRed.Value.ToString() lblGreen.Text = tkbGreen.Value.ToString() lblBlue.Text = tkbBlue.Value.ToString() picShow.BackColor = Color.FromArgb(tkbRed.Value, tkbGreen.Value, tkbBlue.Value) Me.BackColor = picShow.BackColor ckbcolor.Checked = False End Sub '—————————————————————————— '******************各个按钮控制********************** Private Sub btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnexit.Click If ckxexit.Checked = True Then Dim message, title As String Dim style As BorderStyle Dim response As MsgBoxResult message = "是否要退出程序?" title = "提示" style = MsgBoxStyle.Question Or MsgBoxStyle.YesNo response = MsgBox(message, style, title) If response = MsgBoxResult.Yes Then Me.Close() Frmadduser.Close() End If Else Me.Close() Frmadduser.Close() End If End Sub Private Sub btnadduser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadduser.Click '注册新用户信息 Frmadduser.Show() Timadduser.Enabled = True Frmadduser.Location = New Point(0, 0) Frmadduser.Height = 0 Frmadduser.BackColor = Me.BackColor End Sub Private Sub Tim_pic_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timadduser.Tick If Timadduser.Enabled = True Then If Frmadduser.Height <= 500 Then Frmadduser.Height += 50 End If End If End Sub Private Sub btnloading_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnloading.Click '如果勾选了保存用户,那么点击登录的时候,就把此用户的用户名保存到数据库usermsg2中 If ckxkeepname.Checked Then Dim connstr, insertcmd As String connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=usermsg.mdb" ';Jet(OleDb):Database(Password = 123456);" insertcmd = "Insert Into usermsg2([USERID]) values ('" & getsqlstr(cbxname.Text) & "')" Dim conn As OleDbConnection, cmd As OleDbCommand conn = New OleDbConnection(connstr) conn.Open() cmd = New OleDbCommand(insertcmd, conn) cmd.ExecuteNonQuery() conn.Close() End If '检查一下用户名和密码是否都填写 If cbxname.Text = "" Or tbxkey.Text = "" Then Dim message, title As String Dim style As BorderStyle Dim response As MsgBoxResult message = "用户名或密码未填写!" title = "提示" style = MsgBoxStyle.Exclamation response = MsgBox(message, style, title) Else '开始校验用户,从数据库中读取用户名和相应的密码,如果用户是注册过的,则登陆成功 Dim connstr, selectcmd As String selectcmd = "SELECT * FROM usermsg1 WHERE USERID = '"
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服