vb 在不同的分配率中自动调整控件大小的代码

我做这个程序是用的电脑的分配率是1680*1050,我想在分配率是1280*800的电脑开这个程序,可是开了过后就变成下面那样了请问有什么code可以在不同的分配率中自动... 我做这个程序是用的电脑的分配率是1680*1050, 我想在分配率是1280*800 的电脑开这个程序,可是开了过后就变成下面那样了

请问有什么code 可以在不同的分配率中自动调整整个窗口和里面的控件,我想要代码 我不想把分配率改成800*600 重做 太浪费时间了 请各位大大指点指点,谢谢。
我做这个程序的时候是用分配率是1680*1050的电脑做的, 我想在分配率是1280*800 的电脑开这个程序,可是开了过后就变成下面那样了(上面那句写错了 )
也不要用anchor 属性的,如果anchor 属性可以用在那么多控件上的方法的话可以提出来,谢谢
展开
 我来答
alxzoom
2015-06-20 · TA获得超过523个赞
知道小有建树答主
回答量:646
采纳率:80%
帮助的人:431万
展开全部

最好你的控件是控件组,那样好算方便,不然你,就算改,也得盖得累死。

你可以按比例缩放控件。

下面的程序就是先在form载入的时候获取他的大小,然后获取form大小变化后的值,取他的比例。然后按照比例调整控件大小。调整完后重新获取大小 ,作为再调整时的初始值。希望看了之后,对你有帮助。

刚才的程序有点问题,我修改了。

Option Explicit
Dim w, h
Private Sub Form_resize()
Dim bilih, biliw, i
bilih = Form1.Width / h
biliw = Form1.Height / w
For i = 0 To 2
Text1(i).Top = Int(bilih * Text1(i).Top)
Text1(i).Height = Int(bilih * Text1(i).Height)
Text1(i).Left = Int(biliw * Text1(i).Left)
Text1(i).Width = Int(biliw * Text1(i).Width)
Next
w = Form1.Width
h = Form1.Height
End Sub
Private Sub Form_Load()
w = Form1.Width
h = Form1.Height
End Sub

更多追问追答
追答
VB6.0,我那屌程序还是没调试好。。。。不过调整的原理就是那样的。我看看你的
追问
vb 6.0 的code 有点看不懂...
网海1书生
科技发烧友

2015-06-20 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
Private Sub Form_Load()
On Error Resume Next
Dim c As Control, w As Single, h As Single
w = Me.ScaleWidth
h = Me.ScaleHeight
For Each c In Me.Controls
    Err.Clear
    If TypeName(c) = "ComboBox" Or TypeName(c) = "DriveListBox" Then
        c.Tag = c.Left / w & "|" & c.Top / h & "|" & c.Width / w
    ElseIf TypeName(c) = "Line" Then
        c.Tag = c.X1 / w & "|" & c.Y1 / h & "|" & c.X2 / w & "|" & c.Y2 / h
    Else
        c.Tag = c.Left / w & "|" & c.Top / h & "|" & c.Width / w & "|" & c.Height / h
    End If
    If Err.Number Then c.Tag = ""
Next
End Sub

Private Sub Form_Resize()
On Error Resume Next
Dim s() As String, c As Control, w As Single, h As Single
w = Me.ScaleWidth
h = Me.ScaleHeight
For Each c In Me.Controls
    s = Split(c.Tag, "|")
    If UBound(s) = 2 Then
        c.Move w * s(0), h * s(1), w * s(2)
    ElseIf UBound(s) = 3 Then
        If TypeName(c) = "Line" Then
            c.X1 = w * s(0)
            c.Y1 = h * s(1)
            c.X2 = w * s(2)
            c.Y2 = h * s(3)
        Else
            c.Move w * s(0), h * s(1), w * s(2), h * s(3)
        End If
    End If
Next
End Sub

特别说明:

1、个别控件如ComboBox、DriveListBox由于其height(高度)属性是只读的,所以它们的高度是无法随窗体高度的变化而变化的;

2、由于字体的缩放属于有级缩放,无法随窗体实现无级缩放,所以上述代码未考虑控件字体的缩放问题,也就是说字体大小是不变的;

3、上述代码仅保证对VB本身自带的标准控件有效,如果是第三方控件或自定义控件,很可能使用了某些特殊属性,所以不一定有效,但大部分肯定是有效的。

更多追问追答
追问
请问这个是vb 2010 的code 吗?
你的x1 x2 y1 y2 是什么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式