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参数的最大值和最小值,随应用程序的不同而不同。

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

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

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

  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。

相关文档
最新文档