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窗体的名词解释

vb窗体的名词解释VB窗体是指视觉基本器(Visual Basic)中的一个重要组件,用于构建图形用户界面(GUI)。
它提供了一个可交互的容器,用于显示和管理各种控件,如按钮、文本框、标签等。
VB窗体是VB程序中用户与之交互的主要界面,它的设计和布局对于用户体验和应用程序的成功至关重要。
1. 窗体控件VB窗体作为一个容器,可以包含其他控件,例如按钮、文本框和图像等。
这些控件可以通过拖拽和放置的方式添加到窗体上,并通过属性设置和事件响应进行自定义。
窗体控件的位置、大小和样式可以根据需要进行调整,以适应特定的应用程序要求。
通过与用户界面的交互,窗体控件可以实现用户输入和程序输出的各种功能。
2. 窗体事件VB窗体可以响应用户的操作,例如点击按钮、输入文本等。
这些操作会触发窗体上相关控件的事件。
通过编写事件处理程序,可以对这些操作进行相应的处理和反馈。
例如,当用户点击一个按钮时,可以编写相应的代码来执行特定的操作,如打开一个文件,保存数据等。
通过事件处理程序,窗体可以实现与用户的实时互动和实现一系列功能。
3. 窗体布局VB窗体的布局是指对控件的位置和大小进行规划和调整。
通过布局,可以实现界面的整洁和美观,提高用户体验。
常见的窗体布局方式有绝对布局和相对布局。
绝对布局是基于坐标定位的布局方式,通过指定控件的X、Y坐标来确定其位置。
相对布局是基于锚定和对齐方式的布局方式,可以相对于其他控件进行定位和调整,并随着窗体的大小改变而自动调整。
良好的窗体布局可以提高用户的操作效率和可用性。
4. 窗体属性VB窗体具有多个属性,用于定义和自定义窗体的外观和行为。
例如,窗体的标题、图标、背景颜色等都是可以通过属性进行设置的。
通过调整这些属性,可以使窗体与特定的应用场景相匹配,增加应用程序的整体美感。
此外,窗体还有一些特殊的属性,如窗体的大小调整方式、可见性等。
通过设置这些属性,可以使窗体具有更多的灵活性和适应性。
5. 窗体与数据库交互VB窗体还可以与数据库进行交互,实现数据的读取、修改和存储等功能。
VB常用控件属性

组合框基本属性Name、Height、width、Top、L,eft、Enabled、Visible和Index组合框与列表框具有相同的属性:List、ListIndex、ListCount、Selected、Sorted、Text、MultiSelect,Style 等。
组合框的特有属性:组合框有3种不同的样式,其下拉式组合框、简单组合框可输入内容,但必须通过AddItem方法加入。
组合框的风格是由Style属性值决定的。
设置组合框的Style属性可以选用组合框的3种样Style属性为0时,是下拉式组合框,默认状态;Style属性为1时,是简单组合框;Style属性为2时,是下拉列表框。
(1)下拉组合框下拉组合框,显示在屏幕上的仅是文本编辑器和一个下拉箭头。
与下拉列表框相似,蛋下拉列表框可以通过输入文本的方法在表项中选择。
可识别dropdownclickchannge事件。
(2)简单组合框简单组合框,列出所有的项目供用户选择,右边没有下拉箭头,列表框不能收起和下拉。
与文本编辑器一起显示在、屏幕上。
用户可在文本框中直接输入列表项中没有的选项,也可从列表中选择。
可以识别clickchannge事件。
(3)下拉式列表框下拉式列表框与下拉组合框相似,区别是用户不能输入列表框中没有的项,只能在列表中选择。
不能识别dbclick和changge事件。
可识别dropdownclick事件组合框拥有列表框和文本框的大部分属性。
组合框也有SelI,ength、SelStart和SelText这3个文本框才有的属性。
还有LOcked属性和Change事件等。
常用事件组合框响应的事件依赖于其Style属性。
⑴简单组合框(Style属性值为1),才有接收DblClick事件。
(2)下拉组合框(Style属性值为0)与下拉列表框(Style属性值为2),可接收Click事件和DropDown事件。
(3)下拉组合框和简单组合框,可以在文本区输入文本,当输入文本时,可以接收Change事件。
VB6.0第四章-控件,窗体

7
可视化程序设计——第四章 常用控件和窗体
4.4 列表框
7.Text属性(默认属性)
.List(.ListIndex)= .Text
8.MultiSelect属性
None:不允许多选。 Simple:简单多选。每次鼠标单击选中一项。 Extended:可扩展多选,与键盘上的某个键配合使用, 如:ctrl+鼠标。
属性:
Path Pattern Archive Normal System Hidden ReadOnly 设置目录或返回当前工作目录 设置要显示的文件类型 是否显示归档文件 是否显示普通文件 是否显示系统文件 是否显示隐含文件 是否显示只读文件 File1.Path=Dir1.Path File1.Pattern=“*.EXE ; *.DLL”
属性:Drive—设置驱动器或返回当前工作驱动器
可通过语句 Drive1.Drive=“C:\” 指定,或从列表中选择。
Drive属性只能在程序代码中设置、访问, 而不能在属性窗口中设置。
事件:Click、Change(列表框顶部的内容改变)
21
可视化程序设计——第四章 常用控件和窗体
DirListBox控件
4.6 驱动器、目录和文件列表框
三、文件列表框
Name 属性:fil [对象.]Path[=Pathname] [对象.]Pattern[=value] [对象.] FileName [=pathname] Path和FileName
19
可视化程序设计——第四章 常用控件和窗体
DriveListBox控件
16
可视化程序设计——第四章 常用控件和窗体
Visual Basic程序设计第2章VB程序设计的基本窗口

(3)对齐控件 为了将控件在界面上布局得更整齐美观,将3个控件进行调 整位置和大小。 ① 单击Command1按钮,按Shift键的同时单击Command2 按钮,则两个按钮都被选中; ② 选择“格式”菜单→“统一尺寸”菜单项→“两者都相 同”菜单项,将两个按钮的大小调整相同。
的文件清单,包括窗体和模块等。工程文件的后缀是.vbp,工程文件
名显示在工程文件窗口内,以层次化管理方式显示各类文件,而且允 许同时打开多个工程。
工程资源管理器窗口上方提供以下三个按钮:
1——“查看代码”按钮:切换到代码窗口,显示和编辑代码。 2——“查看对象”按钮:切换到模块的对象窗口。
3——“切换文件夹”按钮:工程中的文件在按类型分或不分层
(2)创建控件 在窗体界面中需要绘制两个按钮(CommandButton)控件和一个 文本框(Textl)控件。 ① 单击要绘制的控件的工具,这是“文本框”。 ② 将鼠标指针移到窗体上,该指针变成十字线。 ③ 将十字线放在控件的左上角所在处。 ④ 拖动十字线画出适合控件大小的方框。 ⑤ 释放鼠标按钮,控件出现在窗体上,名称默认为Text1。 用同样的方法将两个按钮放置到窗体中。
1. 创建应用程序界面
窗体是创建应用程序的基础,是其他控件的容器。创建VB应用
程序的第一步是创建窗体,这些窗体将是应用程序界面的基础。然 后在创建的窗体上绘制构成界面的对象。对于上面要创建的第一个 应用程序,用到工具箱中的两个控件,即文本框控件和命令按钮控 件。 (1)创建窗体 创建新工程时,系统就自动创建了一个空白的新窗体,窗体名 默认为Form1。窗体是组织用户交互信息的界面(窗口)。窗体中布 置用于用户交互的控件。
一条线将其分为两部分:左边列出的是各种属性,右边列出的是相 应的属性值。 (4)属性含义说明:当在属性列表框中选取某属性时,在该区 域显示所选属性的含义。 如图2.3显示名称为Form1的窗体属性,“标题栏”用于显示对 象名,属性窗口显示是“按字母序”排序的。
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。
第9章 VB控件的使用

9.1 9.2 9.3 9.4 9.5 9.6 9.7
vb程序设计基础 程序设计基础
VB中的控件 VB中的控件 控件的常用属性及默认属性 焦点和Tab Tab键顺序 焦点和Tab键顺序 控件数组 常用控件的使用 使用ActiveX ActiveX控件 使用ActiveX控件 控件应用举例
vb程序设计基础 程序设计基础
本书目录
9.5 常用控件的使用
9.5.1 命令按钮
用于程序运行时执行相应的事件 1. 属性 (1)Caption (1)Caption 命令按钮上显示的文字 (2)Default 设定该命令按钮是否为默认按钮, (2)Default 设定该命令按钮是否为默认按钮 , 其值为 True时 Enter键相当于用鼠标点击了该按钮 键相当于用鼠标点击了该按钮。 True时,按Enter键相当于用鼠标点击了该按钮。 (3)Cancel (3)Cancel 设定该命令按钮是否为Cancel按钮,其值 设定该命令按钮是否为Cancel按钮, Cancel按钮 True时 ESC键相当于用鼠标点击了该按钮 键相当于用鼠标点击了该按钮。 为True时,按ESC键相当于用鼠标点击了该按钮。 注:在一个窗体上只能有一个命令按钮设为默认按钮和 Cancel按钮 按钮。 Cancel按钮。
vb程序设计基础 程序设计基础
本书目录
(5)Style 按钮样式 (5)Style Standard:默认, 0 —— Standard:默认,按钮上不能显示图形 Graphical: 1 —— Graphical:按钮上可以显示图形和文字 (6) Picture 在按钮装入图形 (7) ToolTipText 加以文字提示 命令按钮一般接收Click Click事件 2. 事件 命令按钮一般接收Click事件
让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常用控件的属性及功能(转帖)控件目录:Form(窗体)、PictureBox(图片框)、Label(标签)、TextBox(文本框)、Frame(框架)、CommandButton (命令按钮)、OptionButton(选项按钮)、ListBox(列表框)、Hscrollbar(水平滚动条)Vscrollbar(垂直滚动条)、Timer(时钟)、Shape(形状)、Line(直线)、Image(图片框)、OLE Container(OLE容器)Form(窗体) 的常用属性及功能1. name (窗体名称):为窗体指定一个名字。
2. Appearance:设置一个窗体是否运行时以3D效果显示。
0—Flat:窗体以平面的形式显示,1—3D:窗体以3D的形式显示(默认值)。
3. AutoRedraw:控制窗体的重画。
True:若其他窗口覆盖当前窗体再返回该再返回该窗体时,VB将重画该窗体内的所有图形False:VB必须调用一个事件过程才能完成重画。
4. BackColor:设置对象中文本和图形的背景色。
5. ForeColor:设置对象中文本和图形的前景色。
6. BorderStyle:为窗体等对象设置边框的式样。
0—None:窗体无边框1—FixedSingle:程序运行后窗体大小不被改变,单线边框2—Sizable:程序运行后窗体大小可以被改变,双线边框3—FixedDouble:程序运行后窗体大小不被改变,双线边框4—FixedToolWindo:程序运行后窗体大小可以被改变,单线边框5—SizableToolWindow:程序运行后窗体大小可以被改变。
7. Caption:设置窗体标题栏显示的文本。
8. Clipcontrols:设置Paint事件的绘图方法—是重画整个对象还是重画新显示的区域。
True:重画整个对象False:重画新显示的区域。
9. ControlBox:运行程序时该属性有效。
VB控件随窗体变化自动调整的实现

VB控件随窗体变化自动调整的实现
王英豪;严泰来
【期刊名称】《网络新媒体技术》
【年(卷),期】2001(022)004
【摘要】本文主要讲述了在VB中实现窗体中的控件随窗体大小变化而自动调整大小和位置的方法.并针对两种不同的情况:直接摆放在窗体上的控件、放在Tab页(标签)上的控件,进行了具体的说明.
【总页数】4页(P222-225)
【作者】王英豪;严泰来
【作者单位】中国农业大学信息管理系,;中国农业大学信息管理系,
【正文语种】中文
【中图分类】TP3
【相关文献】
1.利用VB6.O提供的活动控件实现多表共享窗体 [J], 段勇;张影
2.Q 怎样在中实现窗体控件数据集绑定 [J], 郑文彬
3.控件随窗体变化而自动调整 [J], 徐洪雷
4.自动调节VB程序窗体中控件的位置 [J], 胡奇光;李正华
5.VB编程中控件随窗体变化自适应功能的实现 [J], 赵向红;莫德举
因版权原因,仅展示原文概要,查看原文内容请购买。
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中窗体中的控件大小随窗体自动改变

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窗体中控件⾃动随窗体变化⼤⼩源代码下载:在开发中,往往开发⼈员需要控制控件⼤⼩适应窗⼝的⼤⼩,使得软件在不同的分辨率下也显得⽐例协调.那么,怎么才能让窗体中控件⾃动随窗体变化⼤⼩呢?我觉得有⼀种原始⽅法很有⽤,不让窗体可以最⼤化:⽐如飞天餐饮软件.......当然这种⽅法是绕道⽽⾏.开发出来的软件肯定好看不了.好了,让我们来引出下⾯这个很有⽤,⽐较专业的Model吧.Option ExplicitPrivate FormOldWidth As Long'保存窗体的原始宽度Private FormOldHeight As Long'保存窗体的原始⾼度'在调⽤ResizeForm前先调⽤本函数Public Sub ResizeInit()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()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) * ScaleYNext iNext ObjOn Error GoTo 0End Sub'开发软件时候,把这个modal装⼊程序中.然后加⼊如下代码:Private Sub Form_Load()Sub Form_Load()Call ResizeInit(Me) '在程序装⼊时必须加⼊End SubPrivate Sub Form_Resize()Sub Form_Resize()Call ResizeForm(Me) '确保窗体改变时控件随之改变End Subok,这样你的软件就可以窗体中控件⾃动随窗体变化⼤⼩!你的软件⾄少从外观上从此变得不再那么难看了.⽽且⼤分辨率下也显得⽐例协调了.。
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窗体的控件随窗体变化自动调整大小Option ExplicitPrivate ObjOldWidth As Long '保存窗体的原始宽度Private ObjOldHeight As Long '保存窗体的原始高度Private ObjOldFont As Single '保存窗体的原始字体比'在调用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.T ag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大'小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleYObj.Font.Size = ObjOldFont * FormName.ScaleHeightNext iNext ObjOn Error GoTo 0End SubPrivate Sub Form_Resize()'确保窗体改变时控件随之改变Call ResizeForm(Me) End SubPrivate Sub Form_Load() '在程序装入时必须加入Call ResizeInit(Me)End Sub。
(完整版)VB窗口与VB工具简介

VB 窗口与VB 工具简介1、菜单栏的使用:点击某一菜单将弹出菜单,用鼠标单击菜单上的命令进行该命令的执行。
2、工具栏:工具栏上的工具用鼠标点击就可以使用,它是菜单栏上的常用命令的快捷方式。
将鼠标放在某一工具上就会出现该工具的名称。
3、工具箱:工具箱(如左图)内工具从左至右、从上到下依次为:1)、指针2)图片框(PictureBox )3)、标签(Label )4)、文本框(TextBox )5)、框架(Frame )6)、命令按钮(CommandButton )7)、复选框(CheckBox)8)、单选按钮(OptionButton )9)、下拉框(ComboBox )10)、列表框(ListBox )11)、水平滚动条(HScrollBar )12)、垂直流动条(VScrollBar )13)、时钟(Timer )14)、驱动器列表框(DriveListBox )15)、目录列表框(DirListBox )16)、文件列表框(FileListBox )17)、形状(Shape )18)、线条(Line )19)、图像框(Image )21)、对像(OLE )工具箱中的每一个对象我们称其为控件,使用方法是将鼠标放到某一个控件上,点击鼠标左键一下,然后在窗体上拖拽即添加了该控件。
双击该控件就可以对该控件进行代码的编写。
每个控件都有属于自己的属性。
4、属性窗口:每一个控件都有其相应的属性,在属性窗口中有一个下拉列表,我们选中菜单工具常用工属性那一下对象下面就会有该对象的属性,可按字母排序或分类排序。
当我们选中某一下属性时,最下面会出现相应属性的说明。
例:(右图)该图选中的是窗体对象(Form)的名称属性(Caption),下面还有对该属性的说明.以下是常用控件的常用属性。
1)、图片框(PictureBox)常用属性:Appearance属性(返回/设置一个对象在运行时是否以3D效果显示)、AutoRedraw属性(返回/设置从图形方法到一个持久性位图的输出)、AutoSize属性(决定控件是否能自动调整大小以显示所有的内容)、Picture属性(返回/设置图片框控件中显示的图形。
vb控件知识点总结

vb控件知识点总结VB(Visual Basic)是一种基于对象和事件驱动的编程语言,广泛用于Windows平台上的应用程序开发。
在VB中,控件是构成用户界面的基本元素,通过控件可以实现用户与程序的交互。
控件在VB中扮演着非常重要的角色,掌握控件的使用和操作是学习VB编程的基础。
本文将从控件的基本概念、常见控件种类和使用方法等方面对VB控件进行总结,希望对初学者能有所帮助。
一、控件的基本概念1.控件是什么?在VB中,控件是指用于构建用户界面的可视化元素,如按钮、文本框、标签等。
控件可以响应用户的操作,触发相应的事件,实现用户与程序的交互。
2.控件的属性每个控件都有自己的属性,用来设置控件的外观、行为等。
常见的控件属性包括:大小、位置、背景色、字体、文本内容等。
3.控件的事件控件可以响应用户的操作,如点击、鼠标移动、键盘输入等,这些动作称为事件。
每个控件都有一组事件,可以通过处理这些事件来实现相应的功能。
4.控件的方法控件还有一些方法,用来对控件进行操作或者获取控件的信息。
例如,设置控件的可见性、启用或禁用控件等。
二、常见控件种类1.按钮(Button)按钮是一种常用的控件,用于触发某个操作或者事件。
在VB中,按钮可以设置文本内容、大小、位置等属性,并通过处理按钮的Click事件来实现相应的功能。
2.标签(Label)标签用于显示静态文本内容,通常用于显示提示信息或者标题。
在VB中,标签可以设置文本内容、字体样式、颜色等属性。
3.文本框(TextBox)文本框用于接收用户的输入,常用于输入文本或者数字。
在VB中,文本框可以设置默认文本、最大长度、密码字符等属性,并通过处理文本框的TextChanged事件来获取用户输入的内容。
4.列表框(ListBox)列表框用于显示一个列表,并允许用户从中选择一个或多个项。
在VB中,列表框可以通过Items属性添加列表项,并通过SelectedIndexChanged事件来处理用户的选择操作。
VB实验作业参考答案

1)单击窗体后在窗体上显示“您好!×××同学”。
要求:(1)程序中用自己的姓名替代“×××”。(2)文字以红色、仿宋体、加粗、三号字显示,并在字下加横线。(3)建立一个命令按钮,结束时单击此按钮退出。
答案参照课本P27的例1-6。
2)设计一窗体,窗体上有1个文本框(Text1)、1个命令按钮(Command1),运行时文本框中显示“Visual Basic程序设计”,命令按钮标题为“结束”,文本框及命令按钮能随窗体大小的调整而自动调整大小及位置,其中调整文本框使其:Left=0,Top=0,宽度和高度都为窗体的一半;命令按钮:始终位于窗体右下角位置。请编写:
Command1.Top = Form1.ScaleHeight - Command1.Height
End Sub
Private Sub Form_Resize()
Call Form_Load
End Sub
Private Sub Command1_Click()
End
Dim r1 As Single, r2 As Single, Rp As Single, Rs As Single
r1 = InputBox("请输入第一个电阻值:")
r2 = InputBox("请输入第二个电阻值:")
Rp = (r1 * r2) / (r1 + r2)
Rs = r1 + r2
程序代码:
Private Sub Command1_Click()
Dim sg As String, tz As String, bz As String
sg = Text1.Text
vbalistview自动换行

vbalistview自动换行vbalistview是语言中的一个控件,用于在窗体中显示项目的列表或集合。
默认情况下,vbalistview中的文本是不自动换行的,会在控件的宽度范围内水平滚动显示。
但是,我们可以通过编程方式实现自动换行功能。
要实现vbalistview的自动换行,我们需要采取以下步骤:1. 设置vbalistview的视图模式为"Details"。
在设计时,选中vbalistview控件,然后在属性窗口中将View属性设置为Details。
2. 在代码中添加列的定义。
在Form_Load事件或者其他适当的位置,使用vbalistview的Columns属性来定义列的宽度和标题。
例如,以下代码定义了两列,每列的宽度为150像素,标题分别为"列1"和"列2"。
```VBAListview1.Columns.ClearVBAListview1.Columns.Add(, , "列1", 150)VBAListview1.Columns.Add(, , "列2", 150)```3. 将vbalistview的View属性设置为Details,并启用自动换行。
通过设置ES_AUTOHSCROLL样式来启用自动换行功能。
我们可以在Form_Load事件中实现这一步骤。
例如,以下代码将vbalistview视图模式设置为Details,并启用自动换行功能。
```VBAListview1.View = vbListViewDetailsVBAListview1.AutoArrange = FalseVBAListview1.ScrollBars = lvwScrollAutomaticVBAListview1.Style = vbNormal + vbListView + vbAutoHScroll ```4. 给vbalistview中的项目添加文本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ScaleX = FormName.ScaleWidth / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight
'保存窗体高度缩放比例
On Error Resume Next
Obj.Tag = Obj.Left & " " & Obj.Top & " " _
& Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub
'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, _
Pos(2) * ScaleX, Pos(3) * ScaleY
Next i
Next Obj
On Error GoTo 0
End Sub
Private Sub Form_Load()
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
For Each Obj In FormName
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
当窗体大小改变时,如何动态的改变控件的大小是许多VB 程序员头痛的事。有的人设置窗体Resizable 但却不改变控件的大小;有的人则根据控件的绝对位置与窗口大小相加减的办法来重新定位控件与改变大小,这种办法比较繁琐,且不可重用;当然也有人则限定窗口干脆不让改变。有没有一种简便易行的办法?答案是肯定的,下面给出一个一劳永逸的办法,源程序如下:
Public Sub ResizeForm(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
Option Explicit
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
'在调用Relic Sub ResizeInit(FormName As Form)
Call ResizeInit(Me) '在程序装入时必须加入
End Sub
Private Sub Form_Resize()
Call ResizeForm(Me) '确保窗体改变时控件随之改变
End Sub
本例中给出了二个函数: ResizeInit 和 ResizeForm ,在调用 ResizeForm 之前必须先调用 ResizeInit。你可以将本程序拷到窗体代码段里,然后在窗体里加入任意控件即可进行测试。