设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4157|回复: 4
打印 上一主题 下一主题

[窗体] 如何设置窗体的大小根据内容来调整

[复制链接]
跳转到指定楼层
1#
发表于 2016-10-24 22:54:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个子窗体中,数据从表中获得,但是表的数据是动态的,有1个到12个字段不等。所以,我想根据查到的字段多少来调整子窗体的宽度,使显示效果更好。
请问,各位大神怎样可以实现这样的 效果呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2016-10-24 22:57:30 | 只看该作者
类似这样的代码可以实现: Private Sub Command0_Click()
   
    If Me.Command0.Caption = "扩展" Then
        Me.InsideHeight = Me.InsideHeight + 1000
        Me.主体.Height = Me.主体.Height + 1000
        Me.Command0.Top = Me.Command0.Top + 1000
        Me.Command0.Caption = "收起"
    Else
        Me.主体.Height = Me.主体.Height - 1000
        Me.Command0.Top = Me.Command0.Top - 1000
        Me.InsideHeight = Me.InsideHeight - 1000
        Me.Command0.Caption = "扩展"
    End If
   
End Sub
想问,有没更简单方便的方法来实现?
3#
发表于 2016-10-26 10:56:08 | 只看该作者
有一段代码,丰富一下,就能满足要求,它能自动根据子窗体字段的多少,自动调节子窗体控件的宽度,使之正好容纳,让子窗体的width=所有字段的宽度之和即可,然后加上你上边的代码,放在resize事件里试试!在论坛里可能有,名字大约是控件自适应窗体的一个函数!我也是偶然发现这个函数还有这个功能!
4#
 楼主| 发表于 2016-11-3 17:40:33 | 只看该作者
wzl8007 发表于 2016-10-26 10:56
有一段代码,丰富一下,就能满足要求,它能自动根据子窗体字段的多少,自动调节子窗体控件的宽度,使之正好 ...

谢谢你的回答,学习了。
5#
发表于 2016-11-3 19:59:59 | 只看该作者
'-函数名称:         FormAutoResize
'-功能描述:         当对窗体大小进行调节后自动调节窗体中的控件大小以适应窗体
'-输入参数:         Form                必需的,应用到的窗体对象
'                   CltInit             必需的,用来保存初始尺寸的集合,模块级变量
'                   Initialized         必需的,初始化标志符,模块级变量
'                   DatasheetFontHeight 可选的,初始数据表视图字号
'-返回参数:         无
'-使用示例:         FormAutoResize Me,mcltInit,mInitialized
'-使用注意:         使用时需要在窗体的类模块中声明两个模块级变量:
'                   Private mcltInit As New Collection
'                   Private mInitialized As Boolean
'                   然后在窗体的Form_Resize事件过程中如示例那样调用此函数,如果包含子窗体,需要在子窗体引用的窗体中
'                   同样进行调用
'-兼 容 性:         Access 97及以上版本
'-参考资料:
'-作    者:         红尘如烟
'-创建日期;         2009-3-15
'===================================================================================================================
Function FormAutoResize(ByRef Form As Form, _
                        ByRef CltInit As Collection, _
                        ByRef Initialized As Boolean, _
                        Optional DatasheetFontHeight As Integer = 9)
    On Error Resume Next
    Dim ctl As Control
    Dim SX As Single
    Dim SY As Single

    Screen.ActiveForm.Painting = False
    If Not Initialized Then
        CltInit.Add Form.InsideWidth, "Form_InsideWidth"
        CltInit.Add Form.InsideHeight, "Form_InsideHeight"
        CltInit.Add Form.Section(0).Height, "Form_Section0_Height"
        CltInit.Add Form.Section(1).Height, "Form_Section1_Height"
        CltInit.Add Form.Section(2).Height, "Form_Section2_Height"
        Form.RowHeight = True
        Form.DatasheetFontHeight = DatasheetFontHeight
        CltInit.Add Form.DatasheetFontHeight, "Form_DatasheetFontHeight"
        For Each ctl In Form.Controls
            CltInit.Add ctl.Left, ctl.Name & "_L"
            CltInit.Add ctl.Top, ctl.Name & "_T"
            CltInit.Add ctl.Width, ctl.Name & "_W"
            CltInit.Add ctl.Height, ctl.Name & "_H"
            CltInit.Add ctl.FontSize, ctl.Name & "_F"
        Next
        Initialized = True
    Else
        SX = Form.InsideWidth / CltInit("Form_InsideWidth")
        SY = Form.InsideHeight / CltInit("Form_InsideHeight")
        Select Case Form.CurrentView
        Case 1
            Form.Section(0).Height = CltInit("Form_Section0_Height") * SY
            Form.Section(1).Height = CltInit("Form_Section1_Height") * SY
            Form.Section(2).Height = CltInit("Form_Section2_Height") * SY
            For Each ctl In Form.Controls
                ctl.Left = CltInit(ctl.Name & "_L") * SX
                ctl.Top = CltInit(ctl.Name & "_T") * SY
                ctl.Width = CltInit(ctl.Name & "_W") * SX
                ctl.Height = CltInit(ctl.Name & "_H") * SY
                ctl.FontSize = CltInit(ctl.Name & "_F") * SY
            Next
        Case 2
            Form.DatasheetFontHeight = CltInit("Form_DatasheetFontHeight") * SY
            For Each ctl In Form.Controls
                ctl.ColumnWidth = -2
            Next
        End Select
    End If
    Form.Section(0).Height = CltInit("Form_Section0_Height") * SY
    Form.Section(1).Height = CltInit("Form_Section1_Height") * SY
    Form.Section(2).Height = CltInit("Form_Section2_Height") * SY
    Screen.ActiveForm.Painting = True
    Set ctl = Nothing
End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-20 06:11 , Processed in 0.173076 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表