Foxtable(狐表)用户栏目专家坐堂 → 窗口大小自适应时在不同界面切换的问题


  共有3630人关注过本帖树形打印复制链接

主题:窗口大小自适应时在不同界面切换的问题

帅哥哟,离线,有人找我吗?
天若千颖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
窗口大小自适应时在不同界面切换的问题  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
黄训良
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2016/8/27 0:58:00 [只看该作者]

整个窗口放一个面板,四边锚定,按你的要求放入无数个面板或者分区面板,按需锚定不同的边,放入你的控件即可自动适应电脑显示器或窗口大小!
我的还实现控件自动随窗口大小而改变大小,一排显示不完自动显示到下一排。

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

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/27 7:41:00 [只看该作者]

你说的还是通过锚定的方式控制窗口大小,那PANLE中的PICTURE上标注的LABLE呢?如何在窗口大小改变了的情况下,还是标注在和原来图片的固定位置上?比如中国地图图片,窗口原始大小上标注了“北京”,一旦窗口放大,如何让“北京”这个LABLE还在地图正确的位置上?

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/27 9:20:00 [只看该作者]

1、同时打开多个窗口的时候,全局变量多个窗口都用到,会有冲突,第二个窗口vars("width")和vars("height")改为vars("width2")和vars("height2")就可以了



 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/27 10:51:00 [只看该作者]

以后遇到图片提示的这种错误,把项目下bin目录删除,重启项目即可

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/27 10:52:00 [只看该作者]

至于3楼的问题,请上具体例子说明

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/27 11:01:00 [只看该作者]

例子就在1楼,控件随窗口自动放缩的解决办法之前很多帖子都提到了,都是针对一个窗口,或者独立窗口,如果我所有的窗口都是主窗口呢,只有第一个窗口改变大小之后可以触发sizechanged,在放大的情况下切换到另外的窗口,没法触发sizechanged啊。

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/8/27 11:07:00 [只看该作者]

能否这样解决,给每一个窗口定义一个默认大小,如果识别到窗口的实际大小不等于默认大小,则执行与SIZECHANGED相同的代码?这个,应该在窗口的AFTERLOAD事件中吧?

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/27 11:15:00 [只看该作者]

测试没有问题,看4楼

 回到顶部
总数 23 1 2 3 下一页