欢迎来到天天文库
浏览记录
ID:37716836
大小:30.24 KB
页数:10页
时间:2019-05-29
《彻底隐藏父窗体滚动条》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、彻底隐藏父窗体滚动条探讨作者:以下内容为本人原创,如转载请注明出处。一、前言:本人几乎是编程小白。没有系统学过任何编程语言,全靠在网上左找点代码,右看看例子的自学。所以,下面描述不够专业的地方还望看家海涵与批评指正。二、感想:在vb6时代,隐藏父窗体滚动条非常方便,只需把父窗体的ScrollBars属性设置为False即可。到了vb6以后版本,所有窗体没有ScrollBars属性了,更改为AutoScroll属性。有人说:把AutoScroll属性设置为False在父窗体中不起作用。其实不然,你可以在父窗体中放置一个标签、文本框之类的控件,运行
2、后调整父窗体大小,可以看到当你放置的控件超出父窗体边框时并不会出现滚动条。那么,为什么我们在父窗体中打开子窗体,当移动子窗体超出父窗体工作区时就出现滚动条了呢?这是因为到了vb6以后版本,微软把父窗体的滚动条与父窗体工作区的滚动条分别开来了。的确,有时候,当移动子窗体时,父窗体的滚动条在那里晃来晃去的很不美观。抱着去掉、屏蔽或者说隐藏父窗体滚动条的目的,我纠结了很长一段时间。下面结合自己的实践,说一说我在网上搜到的隐藏父窗体滚动条的办法了。三、经历:1.方法一:在父窗体添加1个Panel容器,比如Panel1先让Panel1的Dock属性设置为
3、Fill(在父窗体容器中停靠)再把Panel1的ScrollBars属性设置为False然后在打开子窗体(比如:Form1)时设置子窗体的父容器为Panel1。父窗体中打开子窗体代码如下:1)Form1.MdiParent=Me2)Form1.Parent=Me.Panel13)Form1.Show()缺点:1)子窗体最大化时子窗体的标题栏在Panel中2)父窗体不能显示打开的子窗体列表,且不能对打开的多个子窗体排序2.方法二:修改父窗体属性先把父窗体的AutoScrollMinSize属性值尽可能修改大,比如修改为(3000,2000)这时,
4、父窗体的IsMdiContainer属性会自动更改为False,只需把它改回True即可。原理:这种方法是把AutoScrollMinSize自动滚动区域的最小逻辑大小变大,这样当子窗体超出父窗体边界时,父窗体客户区滚动条隐藏到了父窗体客户区边界外。这是因为父窗体客户区滚动条是停靠在AutoScrollMinSize指定区域的右边和下边。那么,我们把父窗体的AutoScrollMinSize属性值调整到多少合适呢?一种是超出显示屏的分辨率(宽度、高度分别加30左右为宜),这样无论父窗体调整到多大,滚动条都会隐藏了;一种是超出父窗体客户区(这里是
5、修改客户区MinimumSize属性,而不是父窗体的AutoScrollMinSize属性)宽度和高度较小的值(分别加30左右),这就不能在父窗体属性中设置了,需要在父窗体加载和调整大小事件代码中来实现。具体加多少自己测试下,以刚好能够隐藏滚动条为好,有兴趣的朋友不妨自己测试下。。。缺点:1)子窗体移动时,由于父窗体AutoScrollMinSize的属性值变大,鼠标可以把子窗体拖到父窗体外面去(正常情况鼠标到父窗体客户区内边框时将不再往外移动);子窗体最小化时,最小化窗口跑到了父窗体外面。所以,当子窗体跑到父窗体外面后,子窗体看不到了,再想移
6、动回来就……2)子窗体执行排序命令时,左边、下边超出父窗体,感觉也很别扭!3)如果父窗体是用第三方控件(比如:DotNetBar)制作成的,那么,父窗体的标题栏、菜单栏和边框等就看不全了。3.方法三:发送Windows消息法限制下面代码是我从网上查阅到了较为理想的方法了ImportsSystem.Runtime.InteropServicesPublicClassForm1DimmdiClientAsMdiClient=NothingDimSB_BOTHAsInteger=3_PrivateSh
7、aredFunctionShowScrollBar(ByValhWndAsIntPtr,ByValwBarAsInteger,ByValbShowAsInteger)AsIntegerEndFunctionProtectedOverridesSubWndProc(ByRefmAsMessage)IfmdiClientIsNotNothingThenShowScrollBar(mdiClient.Handle,SB_BOTH,0)EndIfMyBase.WndProc(m)EndSubPrivateSubForm1_Load(ByValsende
8、rAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadForEachcAsContr
此文档下载收益归作者所有