简体   繁体   中英

MS Access: Resizing dialog form from within module

I am trying to open a form in dialog mode, and then resize it to a desired size using DoCmd.MoveSize from a module. Ideally I would like this all to run from said module.

Currently the form opens, but does not get resized. I am guessing this is either because the form is not yet active when the command is being run or because acDialog in the OpenForm command prevents it from being executed. I think I could get away with it plugging the MoveSize command into the OnlOad event of the form but I would prefer having as much of the functionality in the module instead. Is there some way around this issue? Like maybe there is some kind of method to wait for the form to be active or some way to plug a command into the OnLoad event from the module itself? As you can tell I am not too familiar with vba yet. It's part of a little project I am doing. Appreciate any help.

Some sample code is as follows:

This one does not resize the form:

Option Compare Database
Option Explicit

Public Function OpenFormDialog()

    DoCmd.OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acDialog
    DoCmd.MoveSize , , , 9500
    
End Function

This one throws an error because the form is not found:

Option Compare Database
Option Explicit

Public Function OpenFormDialog()

    DoCmd.OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acDialog
    Forms.("MsgBoxForm").DoCmd.MoveSize , , , 9500
    
End Function

You should use the docmd.movesize in the form_open event of the MsgBoxForm form.

Additionally, by executing a docmd.openform, the control flow of program will transfer to the opened form and statements after the docmd.openform will not execute until the opened form is closed.

This is the reason MsgBoxForm is not in the forms collection after docmd.openform.

You could open the form in normal mode, resize and make modal. Just make sure the Modal property on the form is No.

With DoCmd
    .OpenForm "MsgBoxForm", acNormal, , , acFormAdd, acNormal
    .MoveSize , , , 9500
End With

Forms.MsgBoxForm.Modal = True

Keep in mind, any code below the last (modal) statement will still execute. If you need code execution to stop, your only option is to resize in the Load() event directly.

Personally, I believe the the Load() solution is better and you could pass the various sizes through the OpenArgs parameter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM