在17寸液晶上写的程序,为在15的一般显示器上能正常显示,在程序中五个窗体上每个上画了一个resize控件,但每一次按F5运行都有一些窗体不能正常显示,而且每一次出错的窗体都不固定,这是什么原因,是不是还需要设置?

解决方案 »

  1.   

    http://search.csdn.net/Expert/topic/607/607599.xml?temp=.8398706
    http://search.csdn.net/Expert/topic/1192/1192552.xml?temp=.4811518
      

  2.   

    http://community.csdn.net/Expert/topic/3636/3636017.xml?temp=.4588587
    ---------------------------------------
    Option ExplicitType MyControl
        mcName As String
        mcTop As Single
        mcLeft As Single
        mcHeight As Single
        mcWidth As Single
        mcIsArr As Boolean
        mcIndex As Long
    End Type
    Type MyForm
        mfID As Long
        mfControl() As MyControl
    End Type
    Public MyFrm() As MyForm
    '****************************************************
    '函数说明:可以让多个窗体的控件随窗体的大小而改变。
    '****************************************************
    '调用代码:cResize(Me,Load用True Resize用False可以省略)
    '****************************************************
    Public Function cResize(frm As Form, Optional Install As Boolean = False) As Long
        'On Error Resume Next '窗体中有Combo、DriveList等控件时用到。
        If frm.WindowState = 1 Then Exit Function '窗体最小化时略
        Dim i As Long '控件的编号
        Dim j As Long '窗体的编号
        Dim k As Long
        Dim Obj As Object '控件的集合
    '********************************(Form_Load调用的代码)******************************
        If Install = True Then
            Static FrmID As Long
            FrmID = FrmID + 1
            ReDim Preserve MyFrm(FrmID) As MyForm
            MyFrm(FrmID).mfID = frm.hWnd
            For Each Obj In frm.Controls
                If HasIndex(Obj) Then
                    
                        i = i + 1
                        ReDim Preserve MyFrm(FrmID).mfControl(i) As MyControl
                        With MyFrm(FrmID).mfControl(i)
                            .mcName = Obj.Name
                            .mcLeft = Obj.Left / frm.ScaleWidth
                            .mcTop = Obj.Top / frm.ScaleHeight
                            .mcWidth = Obj.Width / frm.ScaleWidth
                            .mcHeight = Obj.Height / frm.ScaleHeight
                            .mcIsArr = True
                            .mcIndex = Obj.Index
                        End With
                    
                Else
                    i = i + 1
                    ReDim Preserve MyFrm(FrmID).mfControl(i) As MyControl
                    With MyFrm(FrmID).mfControl(i)
                        .mcName = Obj.Name
                        .mcLeft = Obj.Left / frm.ScaleWidth
                        .mcTop = Obj.Top / frm.ScaleHeight
                        .mcWidth = Obj.Width / frm.ScaleWidth
                        .mcHeight = Obj.Height / frm.ScaleHeight
                        .mcIsArr = False
                    End With
                End If
            Next
            Exit Function
        End If
    '********************************(Form_Resize调用的代码)****************************
        For j = 1 To UBound(MyFrm)
            If frm.hWnd = MyFrm(j).mfID Then Exit For
        Next
        
        For Each Obj In frm
            For i = 1 To UBound(MyFrm(j).mfControl)
                If Obj.Name = MyFrm(j).mfControl(i).mcName Then Exit For
            Next
            If MyFrm(j).mfControl(i).mcIsArr Then
                
                    For i = 1 To UBound(MyFrm(j).mfControl)
                        k = Obj.Index
                        If (MyFrm(j).mfControl(i).mcIndex = k) And (Obj.Name = MyFrm(j).mfControl(i).mcName) Then
                            Obj.Left = MyFrm(j).mfControl(i).mcLeft * frm.ScaleWidth
                            Obj.Top = MyFrm(j).mfControl(i).mcTop * frm.ScaleHeight
                            Obj.Width = MyFrm(j).mfControl(i).mcWidth * frm.ScaleWidth
                            Obj.Height = MyFrm(j).mfControl(i).mcHeight * frm.ScaleHeight
                        End If
                    
                    Next i
                    
                    
                
            Else
            
                Obj.Left = MyFrm(j).mfControl(i).mcLeft * frm.ScaleWidth
                Obj.Top = MyFrm(j).mfControl(i).mcTop * frm.ScaleHeight
                Obj.Width = MyFrm(j).mfControl(i).mcWidth * frm.ScaleWidth
                Obj.Height = MyFrm(j).mfControl(i).mcHeight * frm.ScaleHeight
            End If
        Next
    End Function
    Public Function HasIndex(CTL As Object) As BooleanDim i As Long
    On Error Resume Next
    Err.Clear
    i = CTL.Index '如果是控件数组,有Index属性,否则没有,会引发一个错误
    HasIndex = (Err = 0)
    Debug.Print CTL.Name
    End Function
    ------------
    这是最后的那个回复。
      

  3.   

    在form_load中预先安排一下它们的尺寸,不要用绝对尺寸,用相对于窗体尺寸的比例会比较好。
      

  4.   

    这个RESIZE控件到底是什么原因,有时按F5能正常,但一生成EXE的一运行就惨不忍睹,真是一点信心没有了?难道还要重新到800*600分辫下重画控件,好烦啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  5.   

    resize我用来控制一个主窗体效果还凑合,多了没用过。我的经验是尽量别用别人现成的控件,尤其不能使用频繁,要不然程序真的会出现各种意想不到的问题,还是用 dongge2000大哥的办法吧,可以控制得很好。
      

  6.   

    Private w0, h0 As Long
    Private w(), h(), l(), t(), f() As Long
    Public Sub Getoldsize(xfrm As Form)
    Dim i, n As Integer
    n = xfrm.Controls.Count - 1
    ReDim w(n), h(n), l(n), t(n), f(n) As Long
        w0 = Main.ScaleWidth
        h0 = Main.ScaleHeight
        For i = 0 To xfrm.Controls.Count - 1
        On Error Resume Next
            w(i) = xfrm.Controls(i).Width
            h(i) = xfrm.Controls(i).Height
            l(i) = xfrm.Controls(i).Left
            t(i) = xfrm.Controls(i).Top
            f(i) = xfrm.Controls(i).Font.Size
        Next i
    End SubPublic Sub Adjustsize(xfrm As Form)
    Dim str As String
    Dim m As Integer
    Dim scaleX, scaleY As Double
        scaleX = Main.ScaleWidth / w0
        scaleY = Main.ScaleHeight / h0
        For i = 0 To xfrm.Controls.Count - 1
        On Error Resume Next
            xfrm.Controls(i).Left = l(i) * scaleX
            xfrm.Controls(i).Top = t(i) * scaleY
            xfrm.Controls(i).Width = w(i) * scaleX
            xfrm.Controls(i).Height = h(i) * scaleY
            xfrm.Controls(i).Font.Size = Int(f(i) * scaleX)
        Next i
    End Sub自己写的,简单易懂,基本可以模拟,Main为窗体名称
    在formload调用getoldsize me,在formresize调用adjustsize meresize确实不好用