以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  窗口大小自适应时在不同界面切换的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89686)

--  作者:天若千颖
--  发布时间:2016/8/26 21:51:00
--  窗口大小自适应时在不同界面切换的问题

看过很人包括红袍老师,有点甜等都提到过的解决方案

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=78838&skin=0

用的最多的是:

Afterload事件

 

vars("width") = e.Form.width
vars("height") = e.Form.height

 

SizeChanged事件

 

For Each c As Winform.Control In e.Form.Controls
    c.Left = c.Left * (e.Form.Width / vars("width"))
    c.Top = c.Top * (e.Form.Height / vars("height"))
    c.Width = c.Width * (e.Form.Width / vars("width"))
    c.Height = c.Height * (e.Form.Height / vars("height"))
Next
msgbox(e.Form.Height / vars("height"))
vars("width") = e.Form.width
vars("height") = e.Form.height

 

 

大红袍老师还提到过控制窗口中的Button大小,只放大缩小其他控件的办法。

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=83979

 

这样的方法只对独立窗口起作用,因为每个独立窗口都是单独打开,打开的时候是原始大小,一旦点击最大化按钮,可以触发窗口的SizeChanged时间,从而实现放缩。但是,很多项目其实基本都是一个主界面,所有的界面都在一个主界面中显示,当窗口第一次最大化时,触发第一个窗口的SizeChanged事件,第一个窗口可以最大化,但是当切换到第二个窗口的时候,窗口大小并没有变,没有办法触发SizeChanged事件,窗口中的控件就没法放缩了。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.rar

如上项目,打开项目,在窗口1和窗口2大小相同, 


图片点击可在新窗口打开查看此主题相关图片如下:窗口1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:窗口2.jpg
图片点击可在新窗口打开查看

 

当放大窗口1之后,再切换到窗口2,窗口2并没有变化。另外,当窗口最小化的时候,也出出现算术溢出的问题。
 


图片点击可在新窗口打开查看此主题相关图片如下:窗口1放大.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:窗口2并没有放大.jpg
图片点击可在新窗口打开查看

 

这种所有窗口都只在一个界面之中,如何实现窗口切换的过程中,也能实现控件的自动适应屏幕呢?

因为我的项目中,有一张地图,需要在地图上标注名字,如果采用停靠或者锚定的方法,Lable没法固定在正确的地方,比如,标注一个“新疆”,采用锚定的办法,当窗口放大之后,图片虽然也能放大,但是,Lable文字没法锚定,放大之后Lable标注的地方,一般都不是新疆了。

 

这样的情况有没有比较好的解决方案,请大红袍老师或者其他遇到过的人指导。

[此贴子已经被作者于2016/8/26 21:56:43编辑过]

--  作者:黄训良
--  发布时间:2016/8/27 0:58:00
--  
整个窗口放一个面板,四边锚定,按你的要求放入无数个面板或者分区面板,按需锚定不同的边,放入你的控件即可自动适应电脑显示器或窗口大小!
我的还实现控件自动随窗口大小而改变大小,一排显示不完自动显示到下一排。

[此贴子已经被作者于2016/8/27 1:02:29编辑过]

--  作者:天若千颖
--  发布时间:2016/8/27 7:41:00
--  
你说的还是通过锚定的方式控制窗口大小,那PANLE中的PICTURE上标注的LABLE呢?如何在窗口大小改变了的情况下,还是标注在和原来图片的固定位置上?比如中国地图图片,窗口原始大小上标注了“北京”,一旦窗口放大,如何让“北京”这个LABLE还在地图正确的位置上?
--  作者:Hyphen
--  发布时间:2016/8/27 9:20:00
--  
1、同时打开多个窗口的时候,全局变量多个窗口都用到,会有冲突,第二个窗口vars("width")和vars("height")改为vars("width2")和vars("height2")就可以了



--  作者:天若千颖
--  发布时间:2016/8/27 10:43:00
--  

 Hypen老师,你回复的3楼的问题参考的帖子我以前看过,但是并不能解决我提到的问题。这种窗口自适应的解决方案只针对一个窗口有用,或者说对独立窗口有用,因为独立窗口每个窗口都是独立的,都可以有SizeChanged事件。

 但是,当我所有的窗口都在一个界面里面,比如我一楼中的例子,所有的窗口都是主窗口,点击按钮“窗口1”和“窗口2”,只有一个界面,当窗口1从原始大小放大到全屏的时候,可以触发窗口的SizeChanged事件,实现控件大小也自动缩放,和http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=83752中的一样的效果。但是,当从窗口1切换到窗口2的时候,并没有触发窗口2的SizeChanged事件啊,因为窗口2的大小并没有改变。

你的意思是说,把各个窗口的vars("width")和vars("height")名为不同的名称就可以了么?为何我在改窗口2的AfterLoad事件的时候,提示[upload=jpg,qq截图20160818204236.jpg]UploadFile/2016-

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160827104246.jpg
图片点击可在新窗口打开查看

 

只修改SizeChanged的话,也提示错误。


 

[此贴子已经被作者于2016/8/27 10:44:55编辑过]

--  作者:Hyphen
--  发布时间:2016/8/27 10:51:00
--  
以后遇到图片提示的这种错误,把项目下bin目录删除,重启项目即可
--  作者:Hyphen
--  发布时间:2016/8/27 10:52:00
--  
至于3楼的问题,请上具体例子说明
--  作者:天若千颖
--  发布时间:2016/8/27 11:01:00
--  
例子就在1楼,控件随窗口自动放缩的解决办法之前很多帖子都提到了,都是针对一个窗口,或者独立窗口,如果我所有的窗口都是主窗口呢,只有第一个窗口改变大小之后可以触发sizechanged,在放大的情况下切换到另外的窗口,没法触发sizechanged啊。
--  作者:天若千颖
--  发布时间:2016/8/27 11:07:00
--  
能否这样解决,给每一个窗口定义一个默认大小,如果识别到窗口的实际大小不等于默认大小,则执行与SIZECHANGED相同的代码?这个,应该在窗口的AFTERLOAD事件中吧?
--  作者:Hyphen
--  发布时间:2016/8/27 11:15:00
--  
测试没有问题,看4楼