遇到一个超级简单的问题,但,我没搞定
遇到一个超级简单的问题,但,我没搞定
表单是有一个容器控件 Container1 ,我想让运行时表单最大化,同时实现以下效果:
with thisform.Container1
.top = 0
.left = 0
.width = thisform.width
.height = thisform.height
endwith
于是,我在表单的init和Resize事件中写下:
with thisform.Container1
.top = 0
.left = 0
.width = thisform.width
.height = thisform.height
endwith
运行结果:
运行初期表单最大化,Container1.top = 0,Container1.left = 0,Container1的宽度和高度为设计时的值。
如果改变表单大小,我要的效果便实现了。
自己探究的结果:
在表单的init事件中检查表单的宽度,发现刚运行时,表单虽然是最大化状态,但其宽度值依然是设计时的值,难怪Container1的宽度高度没有变化。
请问各位:我要怎样才能实现我要的效果,即表单一运行就最大化,里面的Container1控件和表单一样大小。
[解决办法]
*-- 函数 sysmetric(n)
*-- 参数含义及返回值
* 1 当前屏幕宽度
* 2 当前屏幕高度
*-- 如果当前屏幕的宽度不是预先在设计模式下设定的宽度,则进行对表单上控件的自动调整
*-- 注释: _DesignWidth 和 _DesignHeight 是人为设定的程序运行的默认窗口大小
IF SYSMETRIC(1) <> This._DesignWidth
#DEFINE nHeightFactor SYSMETRIC(2) / This._DesignHeight && 默认为 480
#DEFINE nWidthFactor SYSMETRIC(1) / This._DesignWidth && 默认为 640
WITH THIS
*-- 重新调整表单的大小和位置
.Width = .Width * nWidthFactor
.Height = .Height * nHeightFactor
.Left = .Left * nWidthFactor
.Top = .Top * nHeightFactor
*-- 重新调整表单上的控件的大小和位置
FOR nControlLoop = 1 TO .ControlCount
.Controls[nControlLoop].Width = .Controls[nControlLoop].Width * nWidthFactor
.Controls[nControlLoop].Height = .Controls[nControlLoop].Height * nHeightFactor
.Controls[nControlLoop].Left = .Controls[nControlLoop].Left * nWidthFactor
.Controls[nControlLoop].Top = .Controls[nControlLoop].Top * nHeightFactor
*-- 调整控件字体大小
IF PEMSTATUS(.Controls[nControlLoop],"FontSize",5)
.Controls[nControlLoop].FontSize = INT(.Controls[nControlLoop].FontSize * nHeightFactor)
ENDIF
ENDFOR
ENDWITH
ENDIF
将上述代码放在表单的INIT事件是有用的,若将This._DesignWidth改为640,将This._DesignHeight改为480,设AUTOCENTER=.f.效果非常明显
[解决办法]
简单一点的方法
添加一个容器控件
把容器控件拖放到和表单一样大小
然后设置容易控件的Anchor属性值为 15
运行
OK
[解决办法]
为什么thisform.width还是设计时的值呢?
因为你的语句是写在resize中的
指定WindowState的属性值并初始运行的时候,并没有激发resize事件
所以容器的Height,Width 还是设计时的大小
但表单的Height,Width 已经发生了变化了