如题!!我一直试着去改变子窗体的初始大小!哪怕在子窗体的form_load事件中,重新定义子窗体的大小.但还是无济于事....
请教各位大哥,应该如何控制!!!???比如有个MDI窗体,还有一个子窗体A,在MDI界面中通过单击某一个菜单选项调出A来,但A的初始化大小并不是我想要的尽寸...
望各位大哥赐教!!!

解决方案 »

  1.   

    Private Sub MDIForm_Load()
    Form1.Move Form1.Left, Form1.Top, 6000, 6000
    End Sub可以自己改一下,不知道你是不是要这个效果.
      

  2.   

    可以解释一下吗???还有,我的子窗体不止一个!!!Form1.Move Form1.Left, Form1.Top, 6000, 6000
    Form2.Move Form2.Left, Form2.Top, 6000, 6000
    .
    .
    .
    .
    FormX.Move FormX.Left, FormX.Top, 6000, 6000
    如果多个子窗体的话是这样吗?
      

  3.   

    2楼的方法我试了...达不到我想要的结果....而且还有BUG....如果是放在MDI的load事件中,那么,MDI一加载时就会同时出现子窗体....
    并且还有一点是我不想看到的:就是当我不断的打开子窗体,不断的关闭子窗体的时候,子窗体的top值和left值都会不断加大.
    虽然这是在MDI窗体中打开子窗体的一种特征,但我希望子窗体一加载时都是同一个初始化...
    我的目的就是,不窗打开多少个子窗体,我都希望他们的初始化大小一样,而且初始位置也一样!!!
      

  4.   

    把子窗体的BorderStyle设置为1,窗体边框不能改变或Private Sub Form_Resize()
    Me.Height = 5000
    Me.Width = 5000
    End Sub这样好像还是不怎么灵活,顶啊!
      

  5.   

    默认的MDI子窗体是客户区的一半大小(或者更多点)
    你可以试试在每个子窗体中写改变大小的代码!
    如果你怕重复打开子窗体时Left和Top值会不断增大,你可以设置子窗体的Left和Top值为0Private Sub Form_Resize() '注:子窗体的事件,并不是MDI主窗体的
        Move 0, 0, Width, Height
    End Sub而如果你不想子窗体出现在Left为0或者Top为0的地方,则可以在代码中先获取客户区的矩形范围,再进行子窗体的移动:Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As LongPrivate Sub Form_Resize() '注:子窗体的事件,并不是MDI主窗体的
        Dim RcWithClient As RECT
        Dim hWndWithClient As Long
        hWndWithClient = FindWindowEx(主窗体句柄, 0, "MDIClient", vbNullString)
        If hWndWithClient Then
            Call GetClientRect(hWndWithClient, RcWithClient)
            '使子窗体在客户区里居中显示
             Move ((RcWithClient.Right - RcWithClient.Left) / 15 - Width) / 2, _
                ((RcWithClient.Bottom - RcWithClient.Top) / 15 - Height) / 2, _
                Width, Height
        End If
    End Sub如果,你嫌在每个子窗体中添加这些代码麻烦的话,你可以在MDI主窗体中添加一个Timer控件
    在Timer控件的Timer事件中增加下列代码进行判断,不过用Timer控件的话就不能做到实时显示了:Private Sub Timer1_Timer()
        Dim frm As Form
        For Each frm In Forms
            If frm.Name <> "MDI主窗体名称" Then
                '这里写代码~~~~~~
                '不过你可以判断一下子窗体的Left值和Top值,如果与你期望值相同的话就可以不用移动了
            End If
        Next frm
    End Sub
      

  6.   

    (RcWithClient.xxx - RcWithClient.xxx) / 15
    这里错了,应该是乘15才对。