VB中控件位置大小自动适应窗体变化的三种模式详解

合集下载

VB中控件大小随窗体大小变化而变化

VB中控件大小随窗体大小变化而变化

VB中控件大小随窗体大小变化而变化有时窗体变化后,如改变分辨率后控件大小却不能随之改变。

手工代码调整实在麻烦,下面的模块实现自动查找窗体上控件并使其改变大小以适应窗体变化。

在Form的Resize事件中调用函数Resize_All就能实现控件自动调整大小,如:Private Sub Form_Resize()Dim H, i As IntegerOn Error Resume NextResize_ALL Me 'Me是窗体名,Form1,Form2等等都可以End Sub在模块中添加以下代码:Public Type ctrObjName As StringIndex As LongParrent As StringTop As LongLeft As LongHeight As LongWidth As LongScaleHeight As LongScaleWidth As LongEnd TypePrivate FormRecord() As ctrObjPrivate ControlRecord() As ctrObjPrivate bRunning As BooleanPrivate MaxForm As LongPrivate MaxControl As LongPrivate Const WM_NCLBUTTONDOWN = &HA1Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Declare Function ReleaseCapture Lib "USER32" () As Long Function ActualPos(plLeft As Long) As LongIf plLeft < 0 ThenActualPos = plLeft + 75000ElseActualPos = plLeftEnd IfEnd FunctionFunction FindForm(pfrmIn As Form) As LongDim i As LongFindForm = -1If MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenFindForm = iExit FunctionEnd IfNext iEnd IfEnd FunctionFunction AddForm(pfrmIn As Form) As LongDim FormControl As ControlDim i As LongReDim Preserve FormRecord(MaxForm + 1)FormRecord(MaxForm).Name = FormRecord(MaxForm).Top = pfrmIn.TopFormRecord(MaxForm).Left = pfrmIn.LeftFormRecord(MaxForm).Height = pfrmIn.Height FormRecord(MaxForm).Width = pfrmIn.Width FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth AddForm = MaxFormMaxForm = MaxForm + 1For Each FormControl In pfrmIni = FindControl(FormControl, )If i < 0 Theni = AddControl(FormControl, )End IfNext FormControlEnd FunctionFunction FindControl(inControl As Control, inName As String) As LongDim i As LongFindControl = -1For i = 0 To (MaxControl - 1)If ControlRecord(i).Parrent = inName ThenIf ControlRecord(i).Name = ThenOn Error Resume NextIf ControlRecord(i).Index = inControl.Index ThenFindControl = iExit FunctionEnd IfOn Error GoTo 0End IfEnd IfNext iEnd FunctionFunction AddControl(inControl As Control, inName As String) As LongReDim Preserve ControlRecord(MaxControl + 1)On Error Resume NextControlRecord(MaxControl).Name = ControlRecord(MaxControl).Index = inControl.IndexControlRecord(MaxControl).Parrent = inNameIf TypeOf inControl Is Line ThenControlRecord(MaxControl).Top = inControl.Y1ControlRecord(MaxControl).Left = ActualPos(inControl.X1)ControlRecord(MaxControl).Height = inControl.Y2ControlRecord(MaxControl).Width = ActualPos(inControl.X2)ElseControlRecord(MaxControl).Top = inControl.TopControlRecord(MaxControl).Left = ActualPos(inControl.Left)ControlRecord(MaxControl).Height = inControl.HeightControlRecord(MaxControl).Width = inControl.WidthEnd IfinControl.IntegralHeight = FalseOn Error GoTo 0AddControl = MaxControlMaxControl = MaxControl + 1End FunctionFunction PerWidth(pfrmIn As Form) As LongDim i As Longi = FindForm(pfrmIn)If i < 0 Theni = AddForm(pfrmIn)End IfPerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth End FunctionFunction PerHeight(pfrmIn As Form) As DoubleDim i As Longi = FindForm(pfrmIn)If i < 0 Theni = AddForm(pfrmIn)End IfPerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight End FunctionPublic Sub ResizeControl(inControl As Control, pfrmIn As Form)On Error Resume NextDim i As LongDim widthfactor As Single, heightfactor As SingleDim minFactor As SingleDim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As LongyRatio = PerHeight(pfrmIn)xRatio = PerWidth(pfrmIn)i = FindControl(inControl, )If inControl.Left < 0 ThenlLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000) ElselLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)End IflTop = CLng((ControlRecord(i).Top * yRatio) \ 100)lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)If TypeOf inControl Is Line ThenIf inControl.X1 < 0 TheninControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)ElseinControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100) End IfinControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)If inControl.X2 < 0 TheninControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)ElseinControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100) End IfinControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100) ElseinControl.Move lLeft, lTop, lWidth, lHeightinControl.Move lLeft, lTop, lWidthinControl.Move lLeft, lTopEnd IfEnd SubPublic Sub ResizeForm(pfrmIn As Form)Dim FormControl As ControlDim isVisible As BooleanDim StartX, StartY, MaxX, MaxY As LongDim bNew As BooleanIf Not bRunning ThenbRunning = TrueIf FindForm(pfrmIn) < 0 ThenbNew = TrueElsebNew = FalseEnd IfIf pfrmIn.Top < 30000 ThenisVisible = pfrmIn.VisibleOn Error Resume NextIf Not pfrmIn.MDIChild ThenOn Error GoTo 0' ' pfrmIn.Visible = FalseElseIf bNew ThenStartY = pfrmIn.HeightStartX = pfrmIn.WidthOn Error Resume NextFor Each FormControl In pfrmInIf FormControl.Left + FormControl.Width + 200 > MaxX ThenMaxX = FormControl.Left + FormControl.Width + 200End IfIf FormControl.Top + FormControl.Height + 500 > MaxY ThenMaxY = FormControl.Top + FormControl.Height + 500End IfIf FormControl.X1 + 200 > MaxX ThenMaxX = FormControl.X1 + 200End IfIf FormControl.Y1 + 500 > MaxY ThenMaxY = FormControl.Y1 + 500End IfIf FormControl.X2 + 200 > MaxX ThenMaxX = FormControl.X2 + 200End IfIf FormControl.Y2 + 500 > MaxY ThenMaxY = FormControl.Y2 + 500End IfNext FormControlOn Error GoTo 0pfrmIn.Height = MaxYpfrmIn.Width = MaxXEnd IfOn Error GoTo 0End IfFor Each FormControl In pfrmInResizeControl FormControl, pfrmIn Next FormControlOn Error Resume NextIf Not pfrmIn.MDIChild ThenOn Error GoTo 0pfrmIn.Visible = isVisibleElseIf bNew ThenpfrmIn.Height = StartYpfrmIn.Width = StartXFor Each FormControl In pfrmInResizeControl FormControl, pfrmIn Next FormControlEnd IfEnd IfOn Error GoTo 0End IfbRunning = FalseEnd IfEnd SubPublic Sub SaveFormPosition(pfrmIn As Form)Dim i As LongIf MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenFormRecord(i).Top = pfrmIn.TopFormRecord(i).Left = pfrmIn.LeftFormRecord(i).Height = pfrmIn.HeightFormRecord(i).Width = pfrmIn.WidthExit SubEnd IfNext iAddForm (pfrmIn)End IfEnd SubPublic Sub RestoreFormPosition(pfrmIn As Form)Dim i As LongIf MaxForm > 0 ThenFor i = 0 To (MaxForm - 1)If FormRecord(i).Name = ThenIf FormRecord(i).Top < 0 ThenpfrmIn.WindowState = 2ElseIf FormRecord(i).Top < 30000 ThenpfrmIn.WindowState = 0pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).HeightElsepfrmIn.WindowState = 1End IfExit SubEnd IfNext iEnd IfEnd SubPublic Sub Resize_ALL(Form_Name As Form)Dim OBJ As ObjectFor Each OBJ In Form_NameResizeControl OBJ, Form_NameNext OBJEnd SubPublic Sub DragForm(frm As Form)On Local Error Resume NextCall ReleaseCaptureCall SendMessage(frm.hwnd, WM_NCLBUTTONDOWN, 2, 0) End Sub。

vb.net:可根据窗体大小自动调整其中的控件的窗体,下一次打开时,可自动按照以前的位置和。。。

vb.net:可根据窗体大小自动调整其中的控件的窗体,下一次打开时,可自动按照以前的位置和。。。

:可根据窗体⼤⼩⾃动调整其中的控件的窗体,下⼀次打开时,可⾃动按照以前的位置和。

本窗体的所有功能都写在这⾥,其他窗体如果想具有这项功能,不需要做任何变动,只需要继承这个窗体即可,⽐如:Partial Class _frmSuspiciousAlert_caseInherits AML._changableForm ' System.Windows.Forms.Form下⾯是窗体的代码'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 可根据窗体尺⼨⾃动调整其中的控件⼤⼩的窗体Public Class _changableFormInherits Form ' 继承⾃正常的窗体#Region "记录及设置窗体上的控件⼤⼩"' 字典:各个控件及其位置和⼤⼩信息Private dic_controlXY As Dictionary(Of Control, String) = New Dictionary(Of Control, String)' 获取各个控件的 left、top、width、height、字体⼤⼩的值Private Sub getControlsSize(cons As Control)' 遍历窗体中的控件For Each con As Control In cons.Controls'Console.WriteLine(" ----------- " + )' 记下这个控件的左距、上距、宽度、⾼度、字体⼤⼩'con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.SizeDim _value As String = con.Left & ":" & con.Top & ":" & con.Width & ":" & con.Height & ":" & con.Font.SizeIf dic_controlXY.ContainsKey(con) Thendic_controlXY(con) = _valueElsedic_controlXY.Add(con, _value)End If'Console.WriteLine( con.Tag )'Console.WriteLine(" con.Controls.Count = " + con.Controls.Count)If con.Controls.Count > 0 Then ' 如果这个控件内部还有其它控件getControlsSize(con) ' 递归调⽤End IfNextEnd Sub''' 根据窗体的新的⼤⼩调整各个控件的⼤⼩Private Sub setControlsSize(newx As Single, newy As Single, cons As Control)' 遍历窗体中的控件,重新设置控件的值For Each con As Control In cons.Controls'Console.WriteLine( & "---" & con.Tag.ToString)'Console.WriteLine(" setControls " + )If dic_controlXY.ContainsKey(con) = False Then ' 如果字典中没有这个控件Continue For ' 跳过去End If'Dim mytag As String() = con.Tag.ToString().Split(":") '获取控件的Tag属性值,并分割后存储字符串数组Dim mytag As String() = dic_controlXY(con).Split(":") '获取控件的Tag属性值,并分割后存储字符串数组Dim a As Single = Convert.ToSingle(mytag(0)) * newx '根据窗体缩放⽐例确定控件的值,宽度con.Left = CInt(a) '左边缘距离'Console.WriteLine(" con.Width = " + con.Width )a = Convert.ToSingle(mytag(1)) * newycon.Top = CInt(a) ' 上边缘距离'Console.WriteLine(" con.Height = " + con.Height )a = Convert.ToSingle(mytag(2)) * newxcon.Width = CInt(a) '宽度'Console.WriteLine(" con.Left = " + con.Left)a = Convert.ToSingle(mytag(3)) * newycon.Height = CInt(a) '⾼度'Console.WriteLine(" con.Top = " + con.Top )Dim fontSize As Single = Convert.ToSingle(mytag(4)) * newy '字体⼤⼩con.Font = New Font(, fontSize, con.Font.Style, con.Font.Unit)If con.Controls.Count > 0 Then ' 如果本控件内部还有其它控件setControlsSize(newx, newy, con) ' 则进⾏嵌套处理End IfNextEnd Sub#End RegionDim timer1 As Timer ' 定时器,⽤于在窗体加载成功以后调⽤相关功能Private Sub timer1_Tick()timer1.Enabled = Falsexyz_read() ' 读取尺⼨位置信息,并照此进⾏设置Me.WindowState = FormWindowState.Normal ' 注意,必须将 FormWindowState设置为Normal,上⾯的设置⽅可⽣效 ' MessageBox.Show("timer1_Tick")End Sub' 在⿏标拖动变化之前,本窗体的⼤⼩Private formLastX As SinglePrivate formLastY As SinglePrivate Sub _changableForm_Load(sender As Object, e As EventArgs) Handles Me.Load' MaximizeBox = False ' 最⼤化按钮不可⽤;' 原因:点击最⼤化按钮,窗体最⼤化,但不会激发Resize动作,所以已经缩⼩的控件不会随窗体⽽放⼤,⽐较难看 ' 有待解决:窗体最⼤化的事件,该如何捕捉?'AddHandler Me.ResizeEnd, AddressOf Form1_Resize ' 窗体调整⼤⼩时引发事件' 注意,不要⽤上⾯,因为窗体的最⼤化⽆法激发ResizeEnd,但可以激发下⾯的 Resize'AddHandler Me.Resize, AddressOf _changableForm_Resize ' 窗体调整⼤⼩时引发事件formLastX = Me.Width '获取窗体的宽度formLastY = Me.Height '获取窗体的⾼度getControlsSize(Me) '调⽤⽅法,将每个控件的尺⼨、位置都标记下来,作为以后随窗体⽽变化的基础timer1 = New Timertimer1.Interval = 500 '5000 ‘ 执⾏时间timer1.Enabled = True ' 定时器开始执⾏AddHandler timer1.Tick, AddressOf timer1_Tick ' 引发事件End SubPrivate Sub InitializeComponent()Me.SuspendLayout()''_changableForm'Me.ClientSize = New Size(284, 261) = "_changableForm"Me.ResumeLayout(False)End Sub' 当窗体的⼤⼩被改变时,获取其宽度和⾼度被改变的⽐例,按照新的⽐例调整各个控件的⼤⼩和位置Private Sub _changableForm_Resize(sender As Object, e As EventArgs) Handles Me.Resize ' MyBase.ResizeDim newx As Single = Convert.ToSingle(Me.Width / formLastX) ' 窗体宽度缩放⽐例Dim newy As Single = Convert.ToSingle(Me.Height / formLastY) ' 窗体⾼度缩放⽐例setControlsSize(newx, newy, Me) '随窗体⼤⼩改变控件⼤⼩' this.Text = this.Width.ToString() + " " + this.Height.ToString()'窗体标题栏⽂本xyz_write() ' 当尺⼨变化时,记录下来当时的窗体⼤⼩及位置End SubPrivate filePath As String ' = Application.StartupPath & "\config\xyz"Private filePathName As String ' = filePath & "\\" & .ToString & ".txt"Private Sub xyz_read() ' 读取⽂本⽂件中窗体的位置及⼤⼩信息,然后照此设置Dim filePath As String = Application.StartupPath & "\config\xyz"Dim filePathName As String = filePath & "\\" & .ToString & ".txt"If IO.File.Exists(filePathName) = False Then ' 如果这个⽂件不存在Return ' 退出End IfDim reader As IO.TextReader = IO.File.OpenText(filePathName) ' 打开⽂件Dim line As String = reader.ReadLine() '读第⼀⾏reader.Close()'MessageBox.Show(line, "xyz_read() 读取⽂件")Dim ss As String() = line.Split(",")Me.Left = CInt(ss(0))Me.Top = CInt(ss(1))Me.Width = CInt(ss(2))Me.Height = CInt(ss(3))' 上⾯下⾯,效果⼀样' SetBounds(CInt(ss(0)), CInt(ss(1)), CInt(ss(2)), CInt(ss(3)))End Sub' 把当前窗体的⼤⼩及位置信息写到⽂本⽂件中Private Sub xyz_write()' 刚开始时(根据timer判断)If IsNothing(timer1) OrElse timer1.Enabled ThenReturn ' 退出End IffilePath = Application.StartupPath & "\config\xyz"If IO.File.Exists(filePath) = False Then ' 如果这个⽂件夹不存在IO.Directory.CreateDirectory(filePath) ' 新建这个⽂件夹End IffilePathName = filePath & "\\" & .ToString & ".txt" ' ⽂件名,即窗体的名称' 写⼊⽇志⽂件'Dim t As IO.StreamWriter = New IO.StreamWriter(PathUserData, True, System.Text.Encoding.UTF8)Dim t As IO.StreamWriter = New IO.StreamWriter(filePathName, False, System.Text.Encoding.UTF8)Dim strWrite As String = Me.Left & "," & Me.Top & "," & Me.Width & "," & Me.Heightt.WriteLine(strWrite)t.Close()End Sub' 当窗体的位置及⼤⼩变化时,记录下来Private Sub _changableForm_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged ', Me.Resize 'MyBase.LocationChanged' 奇怪,不能同时 handle Me.Resize,否则界⾯不正常xyz_write()End SubEnd Class。

在vb中让控件大小和位置随着表单的大小成比例变化的方法

在vb中让控件大小和位置随着表单的大小成比例变化的方法

在vb中让控件大小和位置随着表单的大小成比例变化的方法vb的可视化编程方法使得windows的一般编程变得简单直观。

尤其是程序界面设计,只需用鼠标将相应的控件(按钮、图框、表格等)拖放到表单(form)上直接调整其位置和大小,即可设计出漂亮实用的界面。

但在程序运行期间,如果改变表单的大小,表单上控件的大小和位置并非成比例地发生相应变化,导致界面呈现难看的不均匀现象。

上述现象和问题,可在表单Form_Resize()过程编程,通过定义表单的ScaleMode属性和表单中控件的Height、Width、Top、Left属性来解决这个问题。

具体实现方法如下:用表单的Height、Width、Top、Left属性设计表单在屏幕中的位置和大小。

将表单中的控件大小和位置调整好,直到得到满意的界面。

选择表单的ScaleMode属性为user;设定ScaleHeight、ScaleWidth的值,如可将这俩个值设定为100或1000或其他的数值,也可使这俩个值不等,视个人的习惯而定,这里我们将其设为1000;使ScaleTop=0、ScaleLeft=0。

ScaleMode属性决定了表单的ScaleHeight、ScaleWidth、ScaleTop、ScaleLeft属性值和表单中控件的Height、Width、Top、Left属性值的度量单位(用户自定义、缇、点、像素、字符、英寸、毫米、厘米等)。

一般使Scaletop和ScaleLeft等于零。

ScaleHeight、ScaleWidth属性值表示以ScaleMode值为度量单位的表单的高和宽,它们的改变不会使表单的大小和位置发生变化。

改变ScaleMode的值不会影响表单和表单中控件的位置和大小,只是表单的ScaleHeight、ScaleWidth属性值和表单中控件的Height、Width、Top、Left属性值要根据新的度量单位自动发生变化。

由于表单的大小、表单中控件的位置和大小已经设定,除了"用户自定义"度量单位外,表单的ScaleHeight、ScaleWidth、ScaleTop、ScaleLeft属性值是一定的。

自动调节VB程序窗体中控件的位置

自动调节VB程序窗体中控件的位置

自动调节VB程序窗体中控件的位置
胡奇光;李正华
【期刊名称】《计算机与数字工程》
【年(卷),期】2005(33)1
【摘要】介绍了当VB程序窗体的大小发生变化时,自动调节窗体中控件位置的方法,并给出了实现其方法的程序代码.
【总页数】3页(P60-62)
【作者】胡奇光;李正华
【作者单位】湖南城市学院计算机科学系,益阳,413000;湖南城市学院计算机科学系,益阳,413000
【正文语种】中文
【中图分类】TP31
【相关文献】
1.控件在窗体中相对位置的确立 [J], 何跃兵;王世平
2.可视化编程工具中控件自动适应窗体大小的实现 [J], 陈正铭;田丽平;蔡天平
3.控件随窗体变化而自动调整 [J], 徐洪雷
4.Excel中的滚动条窗体控件在价格定位中的应用 [J], 顾运筠
5.VB控件随窗体变化自动调整的实现 [J], 王英豪;严泰来
因版权原因,仅展示原文概要,查看原文内容请购买。

Excel VBA编程 调整窗体中的控件

Excel VBA编程  调整窗体中的控件

Excel VBA 编程 调整窗体中的控件设计用户窗体时,要求尽可能的美观整洁、简单实用。

当用户窗体中的控件数量较多时,如何安排各控件的位置,以及设置控件的大小等操作就显得非常的重要了,下面介绍快速调整控件大小及排列控件位置的方法。

1.设置控件大小要设置用户窗体中控件的大小时,可通过拖动鼠标来控制控件的大小。

对于已经添加到窗体上的控件,单击并选中控件时,其周围将出现8个控制点,拖动这些控制点也可以设置控件的大小。

除了使用鼠标拖动的方式来设置控件的大小外,还可以使用Height 和Width 属性来设置控件的高度与宽度,以磅为单位的数值类型的值。

当窗体中的控件较多时,一般还需要将类似的控件设置为大小相同。

可在窗体中选择要设置的控件,并在【属性】窗口中,为其Height 和Width 属性指定值,来设置所选择的控件的大小。

还可以在选择控件后,并右击其中的一个控件,执行【统一尺寸】|【两者有相同】命令,设置控件大小(宽度和高度)相同。

如图12-13所示。

图12-13 设置控件大小【统一尺寸】菜单下有三个子菜单命令,其作用为:●宽度相同 该命令可使被选择的所有控件的宽度相同 ●高度相同 该命令可使被选择的所有控件的高度相同 ●两者相同 该命令可使被选择的所有控件的宽度和高度相同。

执行该命令等于分别执行了【宽度相同】和【高宽相同】。

提 示在使用右键快捷菜单中的命令,来控制控件的大小统一相同的时候,选择的控件将以拥有白色控制点的控件的大小为准。

在本书中称其为“参照控件”。

2.设置控件布局控件布局是指在窗体中添加控件之后,对控件的大小、位置、间距等格式的设置。

通过对窗体控件的布局的设置,可使窗体界面变得更加整齐和美观,并为用户提供一个更加友好的用户界面。

在用户窗体中,分别提供了对窗体对象的对齐、水平间距、垂直间距、窗体内居中和排列按钮等内容设置,下面来介绍这些设置的作用,如表12.5所示。

表12.5 控件布局的设置执行3.设置Tab键顺序使用键盘操作控件时,按“Enter”键相当于单击具有焦点的控件。

vba 让窗体自动适应工作表位置的方法

vba 让窗体自动适应工作表位置的方法

VBA 让窗体自动适应工作表位置的方法在使用 VBA(Visual Basic for Applications)编写 Excel 宏时,有时候我们需要创建自定义窗体来与用户交互。

然而,当窗体的位置与工作表的位置不匹配时,可能会导致用户体验不佳。

因此,本文将介绍如何使用 VBA 让窗体自动适应工作表位置的方法。

1. 窗体的位置和大小在开始编写代码之前,我们首先需要了解窗体的位置和大小。

在 VBA 中,我们可以使用UserForm对象来创建窗体,并通过设置其Left、Top、Width和Height属性来控制窗体的位置和大小。

•Left属性表示窗体左上角相对于屏幕左边的位置(以点为单位)。

•Top属性表示窗体左上角相对于屏幕顶部的位置(以点为单位)。

•Width属性表示窗体的宽度(以点为单位)。

•Height属性表示窗体的高度(以点为单位)。

2. 获取工作表的位置和大小在让窗体自动适应工作表位置之前,我们需要获取工作表的位置和大小。

在 VBA 中,我们可以使用ActiveSheet对象来表示当前活动的工作表,并通过ActiveSheet.Window属性来获取工作表的窗口对象。

通过窗口对象,我们可以获取工作表的位置和大小:•Top属性表示工作表窗口顶部相对于屏幕顶部的位置(以点为单位)。

•Left属性表示工作表窗口左侧相对于屏幕左侧的位置(以点为单位)。

•Width属性表示工作表窗口的宽度(以点为单位)。

•Height属性表示工作表窗口的高度(以点为单位)。

3. 让窗体自动适应工作表位置有了窗体和工作表的位置和大小信息,我们可以编写代码来让窗体自动适应工作表位置。

以下是一个示例代码:Private Sub UserForm_Initialize()Dim ws As WorksheetDim wsTop As DoubleDim wsLeft As DoubleDim wsWidth As DoubleDim wsHeight As Double' 获取当前活动的工作表Set ws = ActiveSheet' 获取工作表窗口的位置和大小wsTop = ws.Window.TopwsLeft = ws.Window.LeftwsWidth = ws.Window.WidthwsHeight = ws.Window.Height' 设置窗体的位置和大小Me.Top = wsTop + 50Me.Left = wsLeft + 50Me.Width = wsWidth - 100Me.Height = wsHeight - 100End Sub在上述示例代码中,我们首先声明了一些变量来存储工作表窗口的位置和大小。

vb窗体的名词解释

vb窗体的名词解释

vb窗体的名词解释VB窗体是指视觉基本器(Visual Basic)中的一个重要组件,用于构建图形用户界面(GUI)。

它提供了一个可交互的容器,用于显示和管理各种控件,如按钮、文本框、标签等。

VB窗体是VB程序中用户与之交互的主要界面,它的设计和布局对于用户体验和应用程序的成功至关重要。

1. 窗体控件VB窗体作为一个容器,可以包含其他控件,例如按钮、文本框和图像等。

这些控件可以通过拖拽和放置的方式添加到窗体上,并通过属性设置和事件响应进行自定义。

窗体控件的位置、大小和样式可以根据需要进行调整,以适应特定的应用程序要求。

通过与用户界面的交互,窗体控件可以实现用户输入和程序输出的各种功能。

2. 窗体事件VB窗体可以响应用户的操作,例如点击按钮、输入文本等。

这些操作会触发窗体上相关控件的事件。

通过编写事件处理程序,可以对这些操作进行相应的处理和反馈。

例如,当用户点击一个按钮时,可以编写相应的代码来执行特定的操作,如打开一个文件,保存数据等。

通过事件处理程序,窗体可以实现与用户的实时互动和实现一系列功能。

3. 窗体布局VB窗体的布局是指对控件的位置和大小进行规划和调整。

通过布局,可以实现界面的整洁和美观,提高用户体验。

常见的窗体布局方式有绝对布局和相对布局。

绝对布局是基于坐标定位的布局方式,通过指定控件的X、Y坐标来确定其位置。

相对布局是基于锚定和对齐方式的布局方式,可以相对于其他控件进行定位和调整,并随着窗体的大小改变而自动调整。

良好的窗体布局可以提高用户的操作效率和可用性。

4. 窗体属性VB窗体具有多个属性,用于定义和自定义窗体的外观和行为。

例如,窗体的标题、图标、背景颜色等都是可以通过属性进行设置的。

通过调整这些属性,可以使窗体与特定的应用场景相匹配,增加应用程序的整体美感。

此外,窗体还有一些特殊的属性,如窗体的大小调整方式、可见性等。

通过设置这些属性,可以使窗体具有更多的灵活性和适应性。

5. 窗体与数据库交互VB窗体还可以与数据库进行交互,实现数据的读取、修改和存储等功能。

vba窗体随计算机屏幕大小而大小

vba窗体随计算机屏幕大小而大小

vba窗体随计算机屏幕大小而大小vba窗体随计算机屏幕大小而大小要想vba窗体随计算机屏幕大小而改变大小思路是:1.将Excel最大化,因为vba窗体的应用程序是application,2.画出窗体的大小与应用程序相同大小3.窗体的画法是movePrivate Sub UserForm_Initialize()With Application.WindowState = xlMaximized 'EXCEL最大化Me.StartUpPosition = 0 '本窗体改为手动Me.Move 0, 0, .Width, .HeightEnd WithEnd SubMove 方法移动一个窗体或控件,或者移动Controls 集合中的所有控件。

语法对于窗体或控件object.Move( [Left [, Top [, Width [, Height [, Layout]]]]])对于 Controls 集合object.Move( X, Y)Move 方法的语法有以下几个成分:成分描述object必需。

有效对象名。

Left可选。

单精度值,以磅为单位,表示对象左边缘的横坐标。

Top可选。

单精度值,以磅为单位,表示对象上边缘的纵坐标。

Width可选。

单精度值,以磅为单位,表示对象的宽度。

Height可选。

单精度值,以磅为单位,表示对象的高度。

Layout可选。

布尔量,表示在这次移动之后控件的父对象是否初始化Layout 事件。

其默认值为False。

X, Y必需。

单精度值,以磅为单位,指定了Controls 集合中每个控件的当前水平和垂直位置的变化量。

设置Left、Top、Width、Height、X和Y参数的最大值和最小值,随应用程序的不同而不同。

说明对于窗体和控件,可将一个选定对象移动到相对于该对象所在窗体的边缘的特定的地方。

可以利用命名的参数,或者可以输入位置参数。

如果用命名的参数,可以用任意的次序列出这些参数;如果不用命名参数,必须按上面语法成分给出的顺序输入这些参数,用逗号来标识未指定的参数的相对位置。

VB中各控件的常用属性

VB中各控件的常用属性

VB中各控件的常用属性1.01、窗体(FORM)的常用属性
1.02、标签控件(Lable)的常用属性
1.03、文本框控件(TextBox)的常用属性
1.05、命令按钮控件(CommandButton)的常用属性
1.06、复选框控件(CheckBox)的常用属性
1.08、组合框控件(ComboBox)常用属性1.09、列表框控件(ListBox)的常用属性
1.10、水平滚动条控件(HScrollBar)和垂直滚动条控件(VScrollBar)的常用属性
1.11、定时器控件的常用属性
1.12、文件系统控件的常用属性
文件控件的说明:
1、当选择新的驱动器后,应用ChDrive 语句更新当前驱动器,语法如下:
ChDrive Drive1. Drive 此属性只能在程序代码中设置、访问,而不能在属性窗口中设置。

2、把驱动器列表框的Drive 属性赋给目录列表框的Pdth 属性,语法如下:
Dir1. Path = Drive1. Drive 3、当选择新的目录后,应用ChDir 语句更新当前目录,语法如下:
ChDir Dir1. Path 文件列表框的Path 属性不能在属性窗口中设置,只能在程序代码中设置。

4、如果要显示当前目录中的所有文件,语法如下: File1. Path = Dir1. Path
5、文件列表框的Pattern 属性用于设置要显示的文件类型。

他可以在程序代码中设置,也可以在属性窗口中设置,此属性支持分号分隔的列表。

如在程序代码中设置,语法如下:
File1. Pattern = " * . 扩展名;* . 扩展名;......"。

VB中控件位置大小自动适应窗体变化的三种模式详解

VB中控件位置大小自动适应窗体变化的三种模式详解

VB中控件位置大小自动适应窗体变化的三种模式详解.doc代码是无需更改的。

第一种。

就是最实用的,就是所有控件的width和height按比例随窗体变化,位置也是当然是按比例哦。

控件的字体不变。

如下复制到代码:'改比例,字体不该。

最实用Option ExplicitPrivate FormOldWidth As Long '保存窗体的原始宽度Private FormOldHeight As Long '保存窗体的原始高度Private Sub Form_Load()Call ResizeInit(Me) '在程序装入时必须加入End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '确保窗体改变时控件随之改变End Sub'在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlFormOldWidth = FormName.ScaleWidthFormOldHeight = FormName.ScaleHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next iNext ObjOn Error GoTo 0End Sub第二种,只位置就是控件的left和top随着变。

VB6中控件窗体大小自动变化

VB6中控件窗体大小自动变化

VB6中控件窗体大小自动变化(非控件、好用的代码)原来用控件来进行这种自适应的,后来就改成这种用代码来实现,效果似乎还要强一点。

模块代码:Option ExplicitPrivate FormOldWidth As Long'保存窗体的原始宽度Private FormOldHeight As Long'保存窗体的原始高度'在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlFormOldWidth = FormName.ScaleWidthFormOldHeight = FormName.ScaleHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / FormOldWidth'保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / FormOldHeight'保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next iNext ObjOn Error GoTo 0End Sub窗体代码:Option ExplicitPrivate Sub Form_Load()Call ResizeInit(Me) '在程序装入时必须加入End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '确保窗体改变时控件随之改变End Sub。

VB布局随窗口大小改变)

VB布局随窗口大小改变)

VB 布局随窗口大小改变凡用过VB编写Windows应用程序的用户都可能有过这样的经历:当一个经过精心设计的应用程序运行后,如果用户重新调整了窗体的大小,则控制在窗体中的相对位置、控件与窗体的大小比例均会严重失调,程序的界面变得面目全非。

一个好的Windows应用程序的界面,自适应窗体尺寸改变的能力是必不可少的。

笔者在这方面做了一些探讨,希望能对VB编程爱好者提供一些启发和帮助。

1、按照窗体尺寸缩放比例自动调整控件的大小窗体和控件的大小由窗体和控件的Width属性和Height属性确定。

所以当用户界面设计完成之后,窗体及其内部的各控件的Width, Height属性便随之确定下来;从而窗体相对于每一个控件,它们的宽度之比、高度之比均被确定。

如果窗体Forml内的一个文本框Text1的宽(即Text1的Width属性值)为3610,高度(即Text1的Height属性值)为1935;而窗体Form1的上述两个值分别为4890和3615,则它们的宽度之比和高度之比分别为:361014890、193513615。

当用户在程序启动后调整了窗体的尺寸,窗体的宽度和高度将分别为Form1.ScaleWidth,Form1.ScaleHeight;此时应该按上述比例来调整文本框Textl的的高度和宽度值。

即:(调整后的Text1的Width属性值)/( Form1.ScaleWidth)=3610/4890;(调整后的Text1的Height属性值)/(Form1.Scale-Height)=1935/3615;所以调整后的Text1的Width属性值=(3610/4890)* Form1.ScaleWidth;调整后的Text1的Height属性值=(1935/3615) * Form1.ScaleHeight;对于一般控件来说,应该有:调整后的控件的Width属性值=(控件原Width属性值/窗体原Width属性值)*窗体.ScaleWidth调整后的控件的Height属性值=(控件原Height属性值/窗体值/窗体原Height属性值)*窗体.ScaleHeight按照上述方法确定窗体缩放后控件Width和Height属性值,则当窗体尺寸被调整后,控件的大小将按比例得到相应的调整。

让VB控件大小随窗体改变而改变(全文)

让VB控件大小随窗体改变而改变(全文)

让VB控件大小随窗体改变而改变XX:1006-8228(20XX)03-42-020 引言VB简单易学,是非常适合非专业程序员的可视化程序设计语言。

但当窗体大小改变时,其中的控件大小不会自动随之改变,这将破坏原来的布局,因此改变几乎毫无意义,所以很多程序员只好限制窗体改变大小,但这样编写出来的程序不完美。

对于这样的“先天”不足,我们在此尝试“后天”弥补。

1 原理当窗体大小改变时,对于控件,应保证其宽度、高度、距窗体左边和上边的距离,以及窗体宽度、高度的比值不变。

记下最初的这几个比值,以后据此足以算出控件新的大小和位置。

控件上可能有文字,如果不对其处理,即大小不变,扩大窗体文字又可能显得太小,特别是逐渐缩小窗体,文字将由横排变成竖排、边缘缺失,甚至控件布局也将错乱(见图2,原来大小一致(见图1)的小文本框(里面有文字,但尚未输入)变得不一致(如其中第61和62个)),而且窗体还不能太小(届时鼠标将不能再向小拖动边框),因此文字的大小也应随窗体改变。

但窗体中文字高度(即字号)、宽度的比值是固定的,无法同时保证其宽度、高度,以及窗体宽度、高度的比值不变,所以不能沿用对控件的做法,文献很难得注意到了这个问题,提出了一个解决方法,即:保证文字高度和窗体高度的比值不变。

但这样如果只改变窗体宽度和文字高度,也即大小(因高度、宽度的比值固定)将不会改变,缩小宽度时还将出现前述的情形,可见这种方法并没有完全解决问题。

本文认为,应该保证文字面积和窗风光积的比值不变,即故Controls(i).Font.Size'=Controls(i).Font.Size=Controls(i).Font.Size=p(i).sp其中,Controls(i).Font.Size是控件i上的文字最初的高度,Controls.(i).Font.Size'是它在窗体改变后的高度,Form1.Width是窗体最初的宽度,Form1.Width'是窗体改变后的宽度,Form1.Height是窗体最初的高度,Form1.Height'是窗体改变后的高度,是文字宽度、高度的比值,p(i).sp是控件上的文字高度和窗体最初面积的平方根的比值。

VB 控件随窗口大小改变

VB 控件随窗口大小改变

VB 控件随窗口大小改变一个好的Windows应用程序的界面,自适应窗体尺寸改变的能力是必不可少的。

笔者在这方面做了一些探讨,希望能对VB编程爱好者提供一些启发和帮助。

凡用过VB编写Windows应用程序的用户都可能有过这样的经历:当一个经过精心设计的应用程序运行后,如果用户重新调整了窗体的大小,则控制在窗体中的相对位置、控件与窗体的大小比例均会严重失调,程序的界面变得面目全非。

1、按照窗体尺寸缩放比例自动调整控件在窗体中的相对位置控件在窗体中的位置由该控件的Left和Top属性确定。

程序启动后如果窗体被缩放,只要按照缩放的比例来重新调整窗体内各控件的Left和Top属性值即可。

所以根据上面介绍的原理,在窗体被缩放之后,只要按照下面的关系来设置控件的Left和Top属性值即可。

调整后控件的Left属性值=(控件原Left属性值/窗体原Left属性值)*窗体.ScaleWidth;调整后控件的Top属性值=(控件原Top属性值/窗体原Top属性值)*窗体.ScaleHeight;2、按照窗体尺寸缩放比例自动调整控件的大小窗体和控件的大小由窗体和控件的Width属性和Height属性确定。

所以当用户界面设计完成之后,窗体及其内部的各控件的Width, Height属性便随之确定下来;从而窗体相对于每一个控件,它们的宽度之比、高度之比均被确定。

如果窗体Forml内的一个文本框Text1的宽(即Text1的Width属性值)为3610,高度(即Text1的Height属性值)为1935;而窗体Form1的上述两个值分别为4890和3615,则它们的宽度之比和高度之比分别为:361014890、193513615。

当用户在程序启动后调整了窗体的尺寸,窗体的宽度和高度将分别为Form1.ScaleWidth,Form1.ScaleHeight;此时应该按上述比例来调整文本框Textl的的高度和宽度值。

即:(调整后的Text1的Width属性值)/( Form1.ScaleWidth)=3610/4890;(调整后的Text1的Height属性值)/(Form1.Scale-Height)=1935/3615;所以调整后的Text1的Width属性值=(3610/4890)* Form1.ScaleWidth;调整后的Text1的Height属性值=(1935/3615) * Form1.ScaleHeight;对于一般控件来说,应该有:调整后的控件的Width属性值=(控件原Width属性值/窗体原Width属性值)*窗体.ScaleWidth调整后的控件的Height属性值=(控件原Height属性值/窗体值/窗体原Height属性值)*窗体.ScaleHeight按照上述方法确定窗体缩放后控件Width和Height属性值,则当窗体尺寸被调整后,控件的大小将按比例得到相应的调整。

VB窗体属性

VB窗体属性

VB窗体的常用属性名称是窗体的标识名,代码中称它为Name。

BackColor:设置窗体背景颜色。

BorderStyle:设置窗体的边框风格。

要请注意的是,属性值为1 - Fixed Single 与 3 - Fixed Dialog 时,窗体外观相同,但功能却不同。

当属性为1 - Fixed Single 时,MaxButton与MinButton这两个属性可以起作用。

MaxButton为True时窗体上具有了最大化按钮。

MinButton为True 时最小化按钮也有效了。

而当属性为3 - Fixed Dialog时,MaxButton与MinButton属性不起作用。

此时MaxButton与MinButton为True,但最大化、最小化按钮均为出现。

Caption:设置窗体标题栏上的文字。

ControlBox:设置窗体标题栏上是否具有控制菜单栏及按钮。

Enabled:决定运行时窗体是否响应用户事件。

在程序运行时可以看到改变 Enabled属性的效果。

此时Enabled已设为False,所以点击按钮不会有反应。

Height:设置窗体的高度Width:设置窗体的宽度Left:设置程序运行时窗体的水平位置Top:设置程序运行时窗体的垂直位置Visible:设置程序运行时窗体是否可见。

当Visible为False时,窗体是不可见的。

将值改为为True。

运行时窗体就是可见的了。

WindowsState:设置程序运行中窗体的最小化、最大化和原形这三种状态。

程序运行时的最小化状态。

Icon:设置窗体标题栏上的图标。

Picture:给窗体配上漂亮的位图。

最后要说明的是:窗体的Name和Caption属性,虽然缺省值相同,都是Form1,但实际意义却不一样。

Caption指的窗体标题栏上的文字,Name指这个窗体的对象名,千万不能混淆。

VB中窗体中的控件大小随窗体自动改变

VB中窗体中的控件大小随窗体自动改变
If TmpPosition > 0 Then
Position(i) = Mid(pCtr.Tag, StartPosition, TmpPosition - StartPosition)
StartPosition = TmpPosition + 1
'变化窗体内的各控件
For Each pCtr In FormName
StartPosition = 1
For i = 0 To 4 '位置和大小
'取得控件的原始位置和大小
TmpPosition = InStr(StartPosition, pCtr.Tag, " ", 1) '按文本比较
Else
Position(i) = 0
End If
'根据控件的原始位置及窗体改变大小的
'比例对控件重新定位与改变大小
pCtr.Move Position(0) * ScaleX, Position(1) * ScaleY, Position(2) * ScaleX, Position(3) * ScaleY
'与其它属性不同,Visual Basic 不使用 Tag 属性的值;
'可用该属性识别对象。
pCtr.Tag = pCtr.Left & " " & pCtr.Top & " " & pCtr.Width & " " & pCtr.Height & " "
Dim pCtr As Control
Dim ScaleX As Double, ScaleY As Double '声明两个变量储存宽度和高度的缩放比例

VB如何使控件位置和大小自动适应窗体变化的三种不同模式

VB如何使控件位置和大小自动适应窗体变化的三种不同模式

VB如何使控件位置和大小自动适应窗体变化的三种不同模式在VB中,可以使用三种不同的模式来使控件的位置和大小自动适应窗体的变化。

这三种模式分别是锚定模式、停靠模式和流式布局。

下面将对这三种模式进行详细介绍。

1. 锚定模式(Anchoring Mode):锚定模式是指通过设定控件的锚点,使其在窗体大小发生变化时保持相对位置不变。

具体而言,可以为每个控件设定一个或多个锚点(Left、Right、Top、Bottom),当窗体的大小发生变化时,控件会根据设定的锚点自动调整位置和大小。

在VB中,可以通过以下步骤来设定控件的锚点:1)在窗体设计器中选择需要设定锚点的控件;2) 在属性窗口中找到Anchor属性,设置锚点的组合,可以通过组合使用4个方向的锚点来实现更灵活的控件调整。

锚定模式的优点是使用简单,适用于一些简单的界面布局,但是对于复杂的界面布局来说,可能需要设定大量的锚点,导致布局复杂,不易维护。

2. 停靠模式(Docking Mode):停靠模式是指将控件固定在窗体的指定位置,当窗体的大小发生变化时,控件会自动调整大小和位置,保持与窗体边缘之间的固定距离。

在VB中,可以通过以下步骤来设定控件的停靠模式:1)在窗体设计器中选择需要设定停靠模式的控件;2) 在属性窗口中找到Dock属性,设置为需要停靠的位置(Top、Bottom、Left、Right、Fill)。

停靠模式的优点是使用简单,适用于一些需要将控件固定在窗体边缘的布局,但对于一些需要灵活调整位置的布局来说,可能会受到限制。

3. 流式布局(Flow Layout):流式布局是指将控件按照一定的顺序依次排列,并在窗体大小变化时自动调整控件的位置和大小,以适应变化后的窗体大小。

在VB中,可以通过以下步骤来使用流式布局:1) 使用FlowLayoutPanel控件作为容器控件,在该容器中添加需要排列的控件;2) 设置FlowLayoutPanel的FlowDirection属性为需要的方向(Horizontal、Vertical);3) 设置FlowLayoutPanel的WrapContents属性为True,使得控件会自动换行排列;4) 设置FlowLayoutPanel的AutoSize属性为True,使得容器会自动调整大小以适应控件的大小变化。

vb控件大全,vb控件详解,vb控件属性详解(3)

vb控件大全,vb控件详解,vb控件属性详解(3)

vb控件大全,vb控件详解,vb控件属性详解(3)1.01、窗体(FORM)的常用属性1.02、标签控件(Lable)的常用属性1.03、文本框控件(TextBox)的常用属性1.04、框架控件(Frame)的常用属性1.05、命令按钮控件(CommandButton)的常用属性1.06、复选框控件(CheckBox)的常用属性1.07、单选钮控件(OptionButton)的常用属性1.08、组合框控件(ComboBox)常用属性1.09、列表框控件(ListBox)的常用属性1.10、水平滚动条控件(HScrollBar)和垂直滚动条控件(VScrollBar)的常用属性1.11、定时器控件的常用属性1.12、文件系统控件的常用属性文件控件的说明:1、当选择新的驱动器后,应用ChDrive语句更新当前驱动器,语法如下:ChDrive Drive1. Drive 此属性只能在程序代码中设置、访问,而不能在属性窗口中设置。

2、把驱动器列表框的Drive属性赋给目录列表框的Pdth属性,语法如下:Dir1. Path = Drive1. Drive3、当选择新的目录后,应用ChDir语句更新当前目录,语法如下:ChDir Dir1. Path 文件列表框的Path属性不能在属性窗口中设置,只能在程序代码中设置。

4、如果要显示当前目录中的所有文件,语法如下:File1. Path = Dir1. Path5、文件列表框的Pattern属性用于设置要显示的文件类型。

他可以在程序代码中设置,也可以在属性窗口中设置,此属性支持分号分隔的列表。

如在程序代码中设置,语法如下:File1. Pattern = " * . 扩展名;* . 扩展名;......"1.13、形状控件(Shape)常用属性1.14、直线控件(Ling)的常用属性1.15、图像控件(Image)的常用属性1.16、图片框控件(PictureBox)的常用属性1.17、数据控件(Data)的常用属性1.18、OLE容器控件(OLE)的常用属性。

VBA控件随窗体变化

VBA控件随窗体变化
Next k
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
End Sub
Private Sub UserForm_Resize()
W = Me.Width
H = Me.Height
If W <> "" And H <> "" Then
For k = 1 To Me.Controls.Count
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB中控件位置大小自动适应窗体变化的三种模式详解.doc代码是无需更改的。

第一种。

就是最实用的,就是所有控件的width和height按比例随窗体变化,位置也是当然是按比例哦。

控件的字体不变。

如下复制到代码:'改比例,字体不该。

最实用Option ExplicitPrivate FormOldWidth As Long '保存窗体的原始宽度Private FormOldHeight As Long '保存窗体的原始高度Private Sub Form_Load()Call ResizeInit(Me) '在程序装入时必须加入End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '确保窗体改变时控件随之改变End Sub'在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlFormOldWidth = FormName.ScaleWidthFormOldHeight = FormName.ScaleHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next iNext ObjOn Error GoTo 0End Sub第二种,只位置就是控件的left和top随着变。

其他都不变。

如果变化大了不好看。

如下复制:Option ExplicitPrivate ObjOldWidth As Long '保存窗体的原始宽度Private ObjOldHeight As Long '保存窗体的原始高度Private ObjOldFont As Single '保存窗体的原始字体比Private Sub Form_Resize()'确保窗体改变时控件随之改变Call ResizeForm(Me)End SubPrivate Sub Form_Load()'在程序装入时必须加入Call ResizeInit(Me)End Sub' '在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlObjOldWidth = FormName.ScaleWidthObjOldHeight = FormName.ScaleHeightObjOldFont = FormName.Font.Size / ObjOldHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,'在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / ObjOldWidth'保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / ObjOldHeight'保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大'小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleYNext iNext ObjEnd Sub第三种,就是所有的都按比例。

包括大小。

字体,位置,就像放大镜的感觉。

复制如下:Option ExplicitPrivate ObjOldWidth As Long '保存窗体的原始宽度Private ObjOldHeight As Long '保存窗体的原始高度Private ObjOldFont As Single '保存窗体的原始字体比'窗体部分Private Sub Form_Resize()'确保窗体改变时控件随之改变Call ResizeForm(Me)End SubPrivate Sub Form_Load()'在程序装入时必须加入Call ResizeInit(Me)End Sub' '在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlObjOldWidth = FormName.ScaleWidthObjOldHeight = FormName.ScaleHeightObjOldFont = FormName.Font.Size / ObjOldHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,'在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / ObjOldWidth'保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / ObjOldHeight'保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大'小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Obj.Font.Size = ObjOldFont * FormName.ScaleHeightNext iNext ObjEnd Sub。

相关文档
最新文档