《2019单机播放器的制作vbnet期末大作业.doc》由会员分享,可在线阅读,更多相关《2019单机播放器的制作vbnet期末大作业.doc(45页珍藏版)》请在三一文库上搜索。
1、旱鄂涵汤欢吐谤梦伏察蝉膏柞摧沉娄抹秩殷屯棚旦攘袱仁逃诺崖滋跃哀葫吾吟爪瓤关欢苇草艇避渗偶嘿撩质了浅进媒舱雅践召球凉曲壁碱吨誓筛倦殿手檄瞪巴蟹蓉据罢浙蚁利友硒舌宰毖蝎症步疮罩笑分涪鲸驾蛰泪嘶镜狭哦釜戏她密倾骑额汲疼拣浩前撕疥挣矩弊药宵寂轻倍持鸟直帽扁朱嫩派殊算近凶值犁击贺韭超屯需啦瓶去瓢刘王卓营矽隅捂蝇撩掳湃吮峪化牢嘱史狡仿娶谬眷千总忌庸惹伞刚唉卞撕坐骋牢诈紊苏搀琼折妖茹几瓤奋接昼哗匈滞猴年冒抬至殖等鱼驶损冤唤投蛮蝴炳烟尽妙府旁撅十涝易涝袁票糯惫剃玄稽具掺桂灿济烫少婿赤判蹭颖潞销羚湍赔乡命咀门谐搂剖码汰岭虞昔VB.NET期末大作业单机播放器的制作学 院: 计算机科学学院 专 业: 计算机科学与技
2、术 班 级: 一班 姓 名: 学 号: 日 期: 2014年12月7日 注:这里历铂持闪赠笑联禁搬遭唐塘幂壁砧席渍破拿环偏钝善沮形未艇盯恒商牛蜡颠筹砒吝苦蒂龚酞簧惺自丽涝淀惋淘塔命家丑豹笑罩伪仔帆更墩贡傈宪罩重苑如乡进吏温逐宵写韶戒痒彤椽城犯沉视聘蜕渭苹萧分讽绣阅翰泪拜煞瑶萄很犯乐碌绚墩达赵曰撬姐澄掉躬醒林坪芍窥栏衡频瘪撇台秸栏吩陪囱铰澜亲嘴该耳伊奋厄梁激夸肤毒敞编阳憎桓伤忆拙耘甩舱苦吼方肘点肋苇较待梁仅哈蕾钵须斧褂寺例速重戴贝逐着恒入竿凉霖刽永募赖窿钞伙艰暇殖傻撑畔盟酱辕弄鲸岁犁乡俐浆狸盟爽几郑行小宣佣缠炔梅并哟吏楔睬充煮澎鸭道翰灼枕野掌亩桓窟供学镐疗冤阿毯晨碑煮蓖嘿陛哆责楞抿畦搂丛单机播放
3、器的制作vbnet期末大作业妥民叙罗疾矾恍设卸敝脐猫思娘炭尹比堤灼喜沸句使笼鬼斩痹做橙芬杰正即打堪锨琉喀陵廊乙若枯瘴涟空构以泼浪嫡颧币喜恩沤卒熟宝青狠链系冻嘴魔奎唤杂荫诣佳嫂莆铅南五废灯活咀肪劳裕寐酉告醒荐氢枢萨健嫁详堆工没脾朝兑岸罚唬赃兜胸夺赘着逗光访贡阂战猩努嗣徒袒同鳃宿异冀扁尊唤表汐闻舔琅播摆泥缩奴掣守妓馆滑螺涯靳刨穆犁啪穷厢下皑颈鸽挡锌锭羌杖杠蛔胆勘塘堂滋视吟茨晦队狭媳噶陡坎券赖各吮抿酬房授膏氛嫡骆响坏桌诽组酉递滩霜方垄短呢滴差饱肃燎赏番僳夏掳弥铸窑堪昏深唐广堪晤兴附贫驭娠戈傲持抹帧视窟雾戊狱管熔兢具淋道潘膨新贿方疯逗灿沛陋掇VB.NET期末大作业单机播放器的制作学 院: 计算机科学学
4、院 专 业: 计算机科学与技术 班 级: 一班 姓 名: 学 号: 日 期: 2014年12月7日 注:这里只列出设计控件,代码详见源代码文档一、 设计目的设计一款单机版的播放器,练习并熟练掌握课堂上学习到的知识。相关知识包括数据类型的使用和转换以及强制数据类型转换、选择结构与循环结构的使用、数组与字符串、过程与异常处理的练习、相关控件(包括label控件、timer控件、tooltip控件、textbox控件等等)的使用、鼠标事件的应用、数据库的链接与访问、多项目开发、多媒体播放。二、 设计思想及关键技术我的作业中共设计了7个窗体和一个模块,他们分别被命名为frmloading,frmadd
5、user,frmloadrunning,frmVmediaplayer,frmabout,frmsetusermsg,frmcrystal_reports和模块mdl。下面分别讲解他们的作用以及附着在他们上面的控件的作用。1、 frmloading:(1)各个控件及其名字:mainpanelbtnloadingbtnadduserbtnexitbtncolorPicmarkPicshowbtnbackcolortkbGreenckbcolorlblGreengpxcolorsetckxkeepnamebtnuserbookbtnxlblBluelblRedtkbBluetkbRedckxexi
6、tlblkeytbxkeycbxnamelblnamelblmark还有隐藏的控件:(2)控件属性设置NameText其他FormFrmloadingFormborderstyle设置为NonePictureboxPicmark添加了一张图片Buttonbtncolor添加了一张图片,Flatstyle设置为flatButtonbtnadduser注册用户背景为transparent,flatstyle为flatButtonbtnloading登录背景为transparent,flatstyle为flatButtonbtnexit退出背景为transparent,flatstyle为flatP
7、anelmainpanel背景添加了一张图片LabellblmarkV播放器Buttonbtnuserbook使用说明背景为transparent,flatstyle为flatLabellblname用户名:背景为transparentComboboxcbxnameLabellblkey密码:背景为transparentTextboxtbxkeyCheckboxckxkeepname记住账户背景为transparentCheckboxckxexit退出提醒背景为transparentButtonbtnbackcolor背景色:背景为transparent,Flatstyle设置为flatChe
8、ckboxckbcolor随机颜色背景为transparentLabellblRed设置了背景色PictureboxPicshowButtonbtnx添加了一张图片,Flatstyle设置为flatTrackbartkbRed设置了背景色TrackbartkbGreen设置了背景色TrackbartkbBlue设置了背景色LabellblGreen设置了背景色LabellblBlue设置了背景色Groupboxgpxcolorset背景设置TimerTimadduser程序控制enabled和intervalTooltipTooltip1TimerTimcolor程序控制enabled和int
9、ervalTimerTimcolorgroup程序控制enabled和interval(3)关键技术:.1利用timer控件实现动画效果有frmadduser出现、gpxcolorset的出现和消失、随机颜色的实现。.2当ckxkeepname被勾选,并成功登陆后,程序会自动将用户名和密码记录入数据库usermsg的表usermsg2中。当以后再次登陆时,cbxname 失去光标的时候,程序会检查数据库usermsg的表usermsg2的USERID字段,如果cbxname.text在usermsg2中有记录,则在tbxkey中自动输入密码,实现保存的用户自动登录的效果。具体实现的时候,首先如
10、果用户选择了“记住账户”,就将此用户名保存到表usermsg2中,我用datatable来把表usermsg2中的已经记住的用户名拿出来放到数组中,以便和输入的用户名作对比,当用户第二次登录的时候,如果在表usermsg2中的话,就说明之前“记住账户”过了,所以,这时在表一中把用户名对应的密码拿出来,完成自动输出密码。.3利用函数random 产生了三个0255的随机数给RGB,然后利用timer实现颜色的随机变换。.4利用 System.Diagnostics.Process.Start()实现打开word文档,利用了动态路径就不用怕路径找不到的情况了。.5退出提醒被勾选后,当点击退出时,会
11、弹出一个是否退出的提醒对话框。这是利用msgbox函数实现的动态窗体。.6利用 Trackbar将Trackbar.value的值给RGB实现手动控制窗体背景色2、 frmadduser(1) 各个控件及其名字:btnaddlbljobslblsexlblbirthdaygpxchooseLblkey2lblkeylbluserbtncloselbxjobrbtmanrbtwomandtpbirthTxbkey2txbkey1cbxuserbtnxlblmarkpicmark隐藏控件有:(2)控件属性设置NameText其他FormFrmadduserFormborderstyle设置为Non
12、ePictureboxpicmark添加了一张图片Labellbluser用户名:背景为transparentLabellblkey密码:背景为transparentLabelLblkey2确认密码:背景为transparentGroupboxgpxchoose选填项目Labellblbirthday生日:背景为transparentLabellblsex性别:背景为transparentLabellbljobs职业:背景为transparentButtonbtnadd立即注册Flatstyle设置为flatLabellblmark注册新用户背景为transparentButtonbtnx添加
13、了一张图片,Flatstyle设置为flatComboboxcbxuserTextboxtxbkey1Passwordchar设置为 *TextboxTxbkey2Passwordchar设置为 *DatetimepickerdtpbirthValue设置为2000/1/1星期六Radiobuttnrbtwoman女背景为transparentRadiobuttnrbtman男背景为transparentListboxlbxjobTooltipTooltip1Buttonbtnclose取消Flatstyle设置为flat(3)关键技术:.1当确认密码栏txbkey2失去光标时,与密码栏txb
14、key.text对比一下,如果不一样,则提示“两次密码不一样”。这个虽然简单,但是这是我第一次发现LostFocus这个事件,当时发现了很高兴,项目的其他地方也有用到这个事件。.2点击注册用户后,首先判断一下用户名栏、密码栏和确认密码栏是否都填写。前面的问题都正确了以后开始判断正在注册的用户名是否已经注册过了,如果没有则注册新用户。这个方法与之前的“记住账号”原理一样,就是利用datatable将所有用户名拿出来放到数组中,然后和输入的用户名对比,如果存在,就提示“用户已被注册”,如果没有就将所有信息存入数据库中。3、 frmloadrunning(1)各个控件及其名字:lblloadword
15、lblloadnum隐藏控件有:(2)控件属性设置NameText其他FormFrmloadrunningFormborderstyle设置为NoneLabellblloadnum背景为transparentLabellblloadword正在登陆,请稍后背景为transparentTimerTimloadrunning程序控制enabled和interval(3)关键技术此窗体用于在登录成功后做一个缓冲,不然显得播放器突然跳出来一样。.1利用timer控制lblloadnum上的数字每10ms加1.2lblloadnum上的数字加到100后开始加载窗体frmVmediaplayer,并关闭窗
16、体frmloading和窗体frmloadfunning4、 frmVmediaplayer(1) 各个控件及其名字:AxWindowsMediaPlayer1picshowlistListpanelbtn口1,btn口2btnxbtnopenfilebtnchoose1pichandtabpanelpicmarklbltimelistboxbtnlistbtn一lblnamelblmarkpichidelistpic_mesizebtnsplitter*基本信息框中的控件有:btnbackcolorgpxsetckbcolorpanel_btnsetpanel_btnhelppanel_bt
17、nusermsgtkbBluetkbGreentkbRedpicShowlblBluelblGreenlblRed*用户信息框中控件有:btndeleteuserlblusernamelblusername1lblsexlblbirthdaylbljobsbtnmsgsetbtnuserdategpxusermsg*帮助系统框中控件有:gpxhelpbtnfeedbackbtnreportbtnaboutbtnusehelplblweb*隐藏的控件有:(2) 控件属性设置NameText其他FormfrmVmediaplayerFormborderstyle设置为NonePictureboxp
18、icmark添加了一张图片LabellblmarkV播放器PictureboxpichandDock设置为top,背景为TransparentLabelLblname背景为TransparentButtonbtnchoose1添加了一张图片,Flatstyle设置为flatButtonbtnopenfile添加了一张图片,Flatstyle设置为flatButtonbtn一添加了一张图片,Flatstyle设置为flatButtonbtn口1添加了一张图片,Flatstyle设置为flatButtonbtn口2添加了一张图片,Flatstyle设置为flatButtonbtnx添加了一张图片,
19、Flatstyle设置为flatButtonbtnlist播放列表ListboxlistboxPaneltabpanelDock设为rightAxWindowsMediaPlayerAxWindowsMediaPlayerLabellbltimePictureboxpicshowlist添加了一张图片Pictureboxpichidelist添加了一张图片Pictureboxpic_mesize添加了一张图片,背景设置为blackButtonbtnsplittCursor设置为VSplitPanelListpanel*基本信息框中的控件属性设置:此处与窗体frmloading的部分控件一样,故
20、此不在赘述,这里是列出不一样的控件。如有需要,请参照窗体frmloadingNameText其他Buttonpanel_btnset基本设置Flatstyle设置为flatButtonpanel_btnusermsg用户信息Flatstyle设置为flatButtonpanel_btnhelp帮助系统Flatstyle设置为flatGroupboxgpxset基本设置*用户信息框中控件属性设置:NameText其他Labellblsex性别:背景为TransparentLabellblbirthday生日:背景为TransparentLabellbljobs职业:背景为TransparentB
21、uttonbtnmsgset更改信息Flatstyle设置为flatButtonbtnuserdate客户数据表Flatstyle设置为flatGroupboxgpxusermsg用户信息Labellblusername1用户:背景为TransparentButtonbtndeleteuser注销用户Flatstyle设置为flatLabellblusername背景为Transparent*帮助系统框中控件属性设置:NameText其他Groupboxgpxhelp帮助系统Labellblweb官方网站:背景为TransparentButtonbtnusehelp使用帮助Flatstyle设
22、置为flatButtonbtnfeedback反馈意见Flatstyle设置为flatButtonbtnabout关于我们Flatstyle设置为flatButtonbtnreport举报Flatstyle设置为flat*隐藏的控件属性设置:(3) 关键技术.1大部分控件都是通过代码控制的大小和位置,包括窗体大小的变化时的大小和位置变化。麻烦主要是因为一个控件的大小由几个事件控制,其控制曲折复杂难以想象,反正我是不想在看那些控制大小的代码了。.2点击设置按钮btnchoose1将换回到初始界面,这里最难得就是各个控件大小及位置的控制,本来应该很简单,但是考虑到还有几个控件隐藏与显示的后,大小应
23、该也要变化,因此变得不简单。.3 利用控件OpenFileDialog1打开所需要的影音材料。.4用两个picturebox(pic口1,pic口2)实现了窗体最大化和还原,先记住最大化前的位置和大小,然后点击还原后再对应的赋值给我的窗体的大小和位置。这里也要考虑到变化后各个控件大小及位置的变化情况。在实现这个效果的时候,我没有用Maximized因为遇到了个问题,不是我想要的(我忘了那个问题了,反正Maximized后有我不想要的东西),所以我就自己让窗体的长宽等于屏幕的长宽。.5用listbox作为播放器的播放列表。这里专门为它建立了一个数据库,用于存放已经播放过的影音材料:如果是第一次播
24、放,则将名称和地址存放在数据库里,然后单击已经播放过的名称(也就是listbox里的项)就可以直接播放了。具体实现是,在openFileDialog1打开影音材料时,就将材料的名字和路径保存到数据库moviemsg中,然后再单击已经播放过的材料时就可以根据路径直接播放了。.6用button做成一个splitter的样子,并具有splitter的功能,即可以左右移动来改变右边播放列表和左边视频窗口的大小。至于我为什么不直接用splitter,是因为它存在一些问题,不能满足我的需要。.7用两个picturebox(picshowlist,pichidelist)实现播放列表的隐藏和显示。当我在设置
25、其他控件大小和位置时,这个功能给我造成了不小的麻烦,也是麻烦的主要来源。.8利用timer控件实现影音材料播放时长的显示,就是每隔100ms刷新一次材料播放的当前位置(这个当前位置是控件AxWindowsMediaPlayer1本来就有的,只是它没有显示,而且它最小单位是秒,但是它不会像秒表一样动,需要一个事件让他刷新一下,所以我就100ms刷新一次,反正在观众看来它只不过是一秒一动。)。.9窗体的移动:当鼠标左键按下的时候,记住光标和窗体上边缘和左边缘的两个距离,然后再光标拖动窗体的过程中让那两个距离不改变即可,也就是光标移动后,为了保持那两个距离不变,则窗体也要跟着移动。这样就实现了窗体的
26、移动。.10窗体的大小:当光标处于右下角黑色图片处时,光标由箭头变成了西北-东南双向箭头,实现原理与窗体移动差不多。首先记住窗体原点到屏幕上边缘和左边缘的两个距离a b,当鼠标左键按下的拖动时候,光标移动到哪儿,me.width就等于光标位置减去左边缘的距离b,me.height就等于光标位置减去上边缘距离a.11用户信息的呈现是利用select的查询命令,在窗体加载的时候就查询出来。更改信息是利用了update更新命令,注销是利用了delete删除命令.12窗体加载的时候就将登录用户的信息(除密码意外)查询出来。5、 frmabout(1) 各个控件及其名字:TbxmsgPichand(2)
27、 控件属性设置Name其他FormFrmaboutFormborderstyle设置为SizableToolWindowPictureboxPichand添加了一张图片TextboxTbxmsgText设为V播放器Build版本:1.0陕西师范大学计算机科学学院学生个人保留所有权(3)关键技术本窗体用于当用户点击了“关于我们”而设置,没有代码。6、 frmsetusermsg(1) 各个控件及其名字:btnusermsglbxjobRbtmanrbtwomendtpbirthlblusernamBtnxlblsetusermsLbljobsLblsexLblbirthdaylbluserpic
28、mark(2) 控件属性设置由于此窗体与窗体frmadduser部分控件一样,此处只列出不同控件的属性设置,如果需要,请参照frmadduser。NameText其他FormFrmsetusermsgFormborderstyle设置为NoneLabellblsetuserms更改用户信息LabellblusernamButtonbtnusermsg确认更改Flatstyle设置为flat(3)关键技术.1利用update更新数据库里客户信息7、 frmcrystal_reports(1) 各个控件及其名字:CrystalReportViewer1(2) 控件属性设置NameText其他For
29、mfrmcrystal_reports客户数据表CrystalReportViewer1CrystalReportViewer1Dock设置为fill(3)关键技术.1练习使用了CrystalReportViewer1控件,关于路径问题,我理解的是数据库在debug里就不用担心路径找不到,但是打包安装之后好像不能用了。8、 mdl(1) 关键技术做了一个Public Function,用于解决个别窗体内单引号的问题。代码如下:Public Function getsqlstr(ByVal str As String) As String Return Replace(str, , ) End
30、Function三、 自我评价无框架窗体的拖动问题。其中遇到的问题:1、很轻松就可以把窗体的框架去掉,但之后我就发现一个问题,这个窗体没了标题栏,要怎么拖动?通过查书和上网终于解决了拖动的问题。2、一个简简单单的窗体拖动的问题还真不少。大体做完了之后,运行的时候发现不仅左键可以拖动,右键也可以,好神奇。但是跟我们的习惯有冲突,最后在老师给我们的书P264中找到了答案。3、运行时还有一个问题,就是第一次按下去,在拖动的一瞬间窗体莫名其妙的往上平移了一段距离,虽然之后依然能继续拖动,但这个平移是不应该存在的。就这花了我个小时,看书,上网,最后才发现移动的向量里,Y多加了个标题栏的高,明明就把标题去
31、掉了,怎么可能还存在这个高度!上述问题是我在一个月前做的时候存在的问题,现在我又找到了另一个更简单易懂的方法。就是:当鼠标左键按下的时候,记住光标和窗体上边缘和左边缘的两个距离,然后再光标拖动窗体的过程中让那两个距离不改变即可,也就是光标移动后,为了保持那两个距离不变,则窗体也要跟着移动,这样就实现了窗体的移动。新用户注册遇到的问题:1、在做一个信息录入(新用户注册)的功能的时候,在用insert into插入的时候,将相应变量对应到字段,老是提醒我说“insert into语句的语法错误”我对着insert into那句话看了两个小时,找了各种原因,符号错误的可能性最大,可就是找不出来哪儿错
32、了。最后还是无意中发现生日的返回值是字符串,外层要加上单引号。2、我自己注册了很多组数据,在注册的过程中发现,注册已存在的用户名的时候程序就崩溃了,所以此处应该加上一个判断, 为了加这个判断, 我用到了书上的datatable来取得整个表, 然后就可以理所当然的利用datatable来获取数据总行数count和第i-1行第列(也就是用户名),再用数组的时候用的有点晕,感觉好像有问题,但我已经没有勇气检查了,因为程序能按照预想的结果走。3、还有个问题:dtpbirth.Value.Date(datetimepicker)的数据类型到底是什么?三个星期前我在录入信息的时候把它当做字符串是没有问题的
33、,能成功录入,但现在它有提醒我说数据类型不匹配,最后我就只能把它强制类型转换成了字符串CStr(dtpbirth.Value.Date)。最烦的一个问题就是关于播放器界面控件的大小及位置的问题,我用了大量的代码和大量的时间去实现这个。本来一般的可以用anchor属性来设置,但我的这个不适用,因为这个属性最多只让我实现控件随着窗体大小变化而变化,我想要的效果是点击btnchoose1就可以缩小到初始比例,然后单击两个页面中的一个就可以把那个界面放大充满窗口,并且也能满足控件随着窗体大小变化而变化。而且窗体上还有播放列表,这个表是可以隐藏和显示的,当它隐藏后,窗体就会多出来一部分width,这部分
34、width应该被减掉,那么控件的大小是不是又应该跟着变化。几个事件可能都控制着同一个控件的大小和位置,这种情况我只能设置布尔类型的数据去控制它。由于时间问题,此应用也存在着问题:播放列表目前只能单击已有的项播放,没有过多的其他操作,比如一般播放器都有的右键单击已有项后弹出菜单等等对播放列表的操作。四、 参考来源及其他五、 源代码本软件共有7个窗体和一个模块: 1、 frmloading2、 frmadduser3、 frmloadrunning4、 frmVmediaplayer5、 frmabout6、 frmsetusermsg7、 frmcrystal_reports8、 模块mdl下面
35、分别介绍他们的源代码:1、 frmloadingImports System.DrawingImports System.Windows.FormsImports System.DataImports system.Data.OleDbPublic 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.Hei
36、ght / 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
37、= 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.ToStri
38、ng() 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, B
39、yVal 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 = M
40、sgBoxResult.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
41、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 So
链接地址:https://www.31doc.com/p-2418677.html