VS2008编写,窗体大小变化时,窗体内空间自动改变大小以适应窗体变化。或者叫做:控件自动
初写VS程序时,可能就会遇到这个问题:窗体大小变化时候,里面的控件却不跟随窗体变化而使程序界面变得难看。我也是摸索了很久才搞定了这个东东。'2011-2-13日实现窗体控件跟随窗体自动改变大小以保持比例
Option Explicit On
Module autosize
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
'此函数用于保存窗体初始大小
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(ByVal FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.Width
FormOldHeight = FormName.Height
On Error Resume Next
For Each Obj In FormName.Controls
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub
'按比例改变表单内各元件的大小, 在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(ByVal FormName As Form)
Dim Pos(4) As Double
Dim I As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.Width / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.Height / FormOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName.Controls
StartPos = 1
For I = 0 To 4
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(I) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(I) = 0
End If
'根据控件的原始位置及窗体改变大小 的比例对控件重新定位与改变大小
Obj.Location = New Point(Pos(0) * ScaleX, Pos(1) * ScaleY)
Obj.Size = New Size(Pos(2) * ScaleX, Pos(3) * ScaleY)
Next I
Next Obj
On Error GoTo 0
End Sub
'此函数用于根据系统屏幕分辨率自动设置窗体位置及大小
Public Sub Auto_Just_Sys_Resolution(ByVal FormName As Form)
Dim sWidthHeight As Rectangle 'Retrieves the bounds of the display that contains the largest portion of the specified rectangle.
Dim temp_width As Integer, temp_height As Integer '用于根据屏幕分辨率设置窗体初始位置及大小
sWidthHeight = Screen.GetBounds(FormName) '获得系统屏幕当前分辨率,存在一个rectangle的4元素数组中
temp_width = sWidthHeight.Width / 16 '将屏幕4等分
temp_height = sWidthHeight.Height / 16
FormName.Top = sWidthHeight.X + temp_height '设置窗体左上角坐标
FormName.Left = sWidthHeight.Y + temp_width
FormName.Width = sWidthHeight.Width - temp_width * 2 '设置窗体大小
FormName.Height = sWidthHeight.Height - temp_height * 2
End Sub
End Module 调用方法:
Public Class MainForm
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call ResizeInit(Me) '初始化
End Sub
Private Sub MainForm_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
Call ResizeForm(Me) '调用窗口自适应程序
End Sub
End Class 不喜欢VB 比较喜欢使用C#,用C#做的一款软件。。。
已经把 XP 的系统更改成登录后就进入本系统,原来的桌面程序已经删除了。。。。
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_638591HW2FDJ.jpg
(原文件名:111.jpg)
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_638592HJYXAS.jpg
(原文件名:222.jpg) 用VC的话重写窗口Resize事件,更改控件位置和大小 VC++加号不见了 不用那么麻烦吧?用ANCHOR和DOCK属性就行了。
我觉得VB.NET比C#还要灵活,尤其是可以像C一样定义全局变量。 ANCHOR和DOCK属性效果不怎么样啊? mark 收下了.
页:
[1]