文档库 最新最全的文档下载
当前位置:文档库 › VB中控件大小随窗体大小变化而变化

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

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

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

有时窗体变化后,如改变分辨率后控件大小却不能随之改变。手工代码调整实在麻烦,下面的模块实现自动查找窗体上控件并使其改变大小以适应窗体变化。

在Form的Resize事件中调用函数Resize_All就能实现控件自动调整大小,如:

Private Sub Form_Resize()

Dim H, i As Integer

On Error Resume Next

Resize_ALL Me 'Me是窗体名,Form1,Form2等等都可以

End Sub

在模块中添加以下代码:

Public Type ctrObj

Name As String

Index As Long

Parrent As String

Top As Long

Left As Long

Height As Long

Width As Long

ScaleHeight As Long

ScaleWidth As Long

End Type

Private FormRecord() As ctrObj

Private ControlRecord() As ctrObj

Private bRunning As Boolean

Private MaxForm As Long

Private MaxControl As Long

Private Const WM_NCLBUTTONDOWN = &HA1

Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function ReleaseCapture Lib "USER32" () As Long Function ActualPos(plLeft As Long) As Long

If plLeft < 0 Then

ActualPos = plLeft + 75000

Else

ActualPos = plLeft

End If

End Function

Function FindForm(pfrmIn As Form) As Long

Dim i As Long

FindForm = -1

If MaxForm > 0 Then

For i = 0 To (MaxForm - 1)

If FormRecord(i).Name = https://www.wendangku.net/doc/f05168574.html, Then

FindForm = i

Exit Function

End If

Next i

End If

End Function

Function AddForm(pfrmIn As Form) As Long

Dim FormControl As Control

Dim i As Long

ReDim Preserve FormRecord(MaxForm + 1)

FormRecord(MaxForm).Name = https://www.wendangku.net/doc/f05168574.html,

FormRecord(MaxForm).Top = pfrmIn.Top

FormRecord(MaxForm).Left = pfrmIn.Left

FormRecord(MaxForm).Height = pfrmIn.Height FormRecord(MaxForm).Width = pfrmIn.Width FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth AddForm = MaxForm

MaxForm = MaxForm + 1

For Each FormControl In pfrmIn

i = FindControl(FormControl, https://www.wendangku.net/doc/f05168574.html,)

If i < 0 Then

i = AddControl(FormControl, https://www.wendangku.net/doc/f05168574.html,)

End If

Next FormControl

End Function

Function FindControl(inControl As Control, inName As String) As Long

Dim i As Long

FindControl = -1

For i = 0 To (MaxControl - 1)

If ControlRecord(i).Parrent = inName Then

If ControlRecord(i).Name = https://www.wendangku.net/doc/f05168574.html, Then

On Error Resume Next

If ControlRecord(i).Index = inControl.Index Then

FindControl = i

Exit Function

End If

On Error GoTo 0

End If

End If

Next i

End Function

Function AddControl(inControl As Control, inName As String) As Long

ReDim Preserve ControlRecord(MaxControl + 1)

On Error Resume Next

ControlRecord(MaxControl).Name = https://www.wendangku.net/doc/f05168574.html,

ControlRecord(MaxControl).Index = inControl.Index

ControlRecord(MaxControl).Parrent = inName

If TypeOf inControl Is Line Then

ControlRecord(MaxControl).Top = inControl.Y1

ControlRecord(MaxControl).Left = ActualPos(inControl.X1)

ControlRecord(MaxControl).Height = inControl.Y2

ControlRecord(MaxControl).Width = ActualPos(inControl.X2)

Else

ControlRecord(MaxControl).Top = inControl.Top

ControlRecord(MaxControl).Left = ActualPos(inControl.Left)

ControlRecord(MaxControl).Height = inControl.Height

ControlRecord(MaxControl).Width = inControl.Width

End If

inControl.IntegralHeight = False

On Error GoTo 0

AddControl = MaxControl

MaxControl = MaxControl + 1

End Function

Function PerWidth(pfrmIn As Form) As Long

Dim i As Long

i = FindForm(pfrmIn)

If i < 0 Then

i = AddForm(pfrmIn)

End If

PerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth End Function

Function PerHeight(pfrmIn As Form) As Double

Dim i As Long

i = FindForm(pfrmIn)

If i < 0 Then

i = AddForm(pfrmIn)

End If

PerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight End Function

Public Sub ResizeControl(inControl As Control, pfrmIn As Form)

On Error Resume Next

Dim i As Long

Dim widthfactor As Single, heightfactor As Single

Dim minFactor As Single

Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long

yRatio = PerHeight(pfrmIn)

xRatio = PerWidth(pfrmIn)

i = FindControl(inControl, https://www.wendangku.net/doc/f05168574.html,)

If inControl.Left < 0 Then

lLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000) Else

lLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)

End If

lTop = 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 Then

If inControl.X1 < 0 Then

inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)

Else

inControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100) End If

inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)

If inControl.X2 < 0 Then

inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)

Else

inControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100) End If

inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100) Else

inControl.Move lLeft, lTop, lWidth, lHeight

inControl.Move lLeft, lTop, lWidth

inControl.Move lLeft, lTop

End If

End Sub

Public Sub ResizeForm(pfrmIn As Form)

Dim FormControl As Control

Dim isVisible As Boolean

Dim StartX, StartY, MaxX, MaxY As Long

Dim bNew As Boolean

If Not bRunning Then

bRunning = True

If FindForm(pfrmIn) < 0 Then

bNew = True

Else

bNew = False

End If

If pfrmIn.Top < 30000 Then

isVisible = pfrmIn.Visible

On Error Resume Next

If Not pfrmIn.MDIChild Then

On Error GoTo 0

' ' pfrmIn.Visible = False

Else

If bNew Then

StartY = pfrmIn.Height

StartX = pfrmIn.Width

On Error Resume Next

For Each FormControl In pfrmIn

If FormControl.Left + FormControl.Width + 200 > MaxX Then MaxX = FormControl.Left + FormControl.Width + 200 End If

If FormControl.Top + FormControl.Height + 500 > MaxY Then MaxY = FormControl.Top + FormControl.Height + 500 End If

If FormControl.X1 + 200 > MaxX Then

MaxX = FormControl.X1 + 200

End If

If FormControl.Y1 + 500 > MaxY Then

MaxY = FormControl.Y1 + 500

End If

If FormControl.X2 + 200 > MaxX Then

MaxX = FormControl.X2 + 200

End If

If FormControl.Y2 + 500 > MaxY Then

MaxY = FormControl.Y2 + 500

End If

Next FormControl

On Error GoTo 0

pfrmIn.Height = MaxY

pfrmIn.Width = MaxX

End If

On Error GoTo 0

End If

For Each FormControl In pfrmIn

ResizeControl FormControl, pfrmIn Next FormControl

On Error Resume Next

If Not pfrmIn.MDIChild Then

On Error GoTo 0

pfrmIn.Visible = isVisible

Else

If bNew Then

pfrmIn.Height = StartY

pfrmIn.Width = StartX

For Each FormControl In pfrmIn

ResizeControl FormControl, pfrmIn Next FormControl

End If

End If

On Error GoTo 0

End If

bRunning = False

End If

End Sub

Public Sub SaveFormPosition(pfrmIn As Form)

Dim i As Long

If MaxForm > 0 Then

For i = 0 To (MaxForm - 1)

If FormRecord(i).Name = https://www.wendangku.net/doc/f05168574.html, Then

FormRecord(i).Top = pfrmIn.Top

FormRecord(i).Left = pfrmIn.Left

FormRecord(i).Height = pfrmIn.Height

FormRecord(i).Width = pfrmIn.Width

Exit Sub

End If

Next i

AddForm (pfrmIn)

End If

End Sub

Public Sub RestoreFormPosition(pfrmIn As Form)

Dim i As Long

If MaxForm > 0 Then

For i = 0 To (MaxForm - 1)

If FormRecord(i).Name = https://www.wendangku.net/doc/f05168574.html, Then

If FormRecord(i).Top < 0 Then

pfrmIn.WindowState = 2

ElseIf FormRecord(i).Top < 30000 Then

pfrmIn.WindowState = 0

pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).Height

Else

pfrmIn.WindowState = 1

End If

Exit Sub

End If

Next i

End If

End Sub

Public Sub Resize_ALL(Form_Name As Form)

Dim OBJ As Object

For Each OBJ In Form_Name

ResizeControl OBJ, Form_Name

Next OBJ

End Sub

Public Sub DragForm(frm As Form)

On Local Error Resume Next

Call ReleaseCapture

Call SendMessage(frm.hwnd, WM_NCLBUTTONDOWN, 2, 0) End Sub

C#在主窗体Panel中添加新的窗体

在主窗体Panel中添加新的窗体(C#,winform开发) 本文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体的控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 我想你一定看过这样的配制信息窗体吧(迅雷的配置页面)。 在你的项目开发中,是否也希望做出做出这种效果呢?应该如何设置呢?单击窗体的左边的按钮,窗体右边的内容会根据单击的按钮变化. 开始是想到的设置思路很简单,主窗体(如上图),右边放置一个Panel控件.然后根据单击的按钮将子窗体显示在Panel控件上.在按钮的单击事件中加入下面的代码:private void button1_Click(object sender, EventArgs e) {ChildForm child = new ChildForm(); this.panel1.Controls.Add(child); child.Show(); }运行程序显示“不能将顶级控件添加到一个控件上”出现“不能将顶级控件添加到一个控件上”错误怎么处理?在代码中加入 child.TopLevel = false;OK.新问题又出现了.我们不希望子窗体的标题和边筐也显示在父窗体中,再添加如下代码.

child.FormBorderStyle = FormBorderStyle.None;现在的感觉是不是舒服多了.但是还隐藏着一个新问题.怎样动态设置子窗体的Size、Location等呢?我希望在调整父窗体大小时,Panel1中子窗体的大小也跟随动态自动调整 .需要加入下面的事件 private void panel1_Resize(object sender,System.EventArgs e) { try { this.child.ClientSize=new System.Drawing.Size(panel1.Size.Width,pa nel1.Size.Height); } catch(System.Exception Er) { MessageBox.Show(Er.ToString()); } }编译无错,执行时(Error:未将对象引用设置到对象的实例) 但连续点了4个一样的错误提示确认后,程序却可以正常执行,并且form1调整窗体大小form2也可以随之响应了。 此计不行,又生一计.我们可以把子窗体当成一个控件,设置Dock属性不就行了吗?赶快测试一下:private void button1_Click(object sender, EventArgs e) {ChildForm child = new ChildForm(); child.TopLevel = false; child.Dock = System.Windows.Forms.DockStyle.Fill; child.FormBorderStyle = FormBorderStyle.None; //child.Parent = this.panel1; this.panel1.Controls.Add(child); child.Show(); }

使用窗体控件

第2章使用窗体控件 课堂练习:为控件创建事件处理程序 5)传递给这个事件处理程序的第二个参数(e)的目的是什么? 答:参数e包含事件数据。它是一个EventArgs 对象(实际不包含事件数据的基类),或者是一个派生类(像MouseEventArgs)的实例。要查看派生类的完整列表,请在Visual Studio .NET帮助文档中使用短语“EventArgs 类”进行查找,然后点击链接转到“派生类”。 ●为Click 事件创建一个事件处理程序。 3)上面的双击动作为什么创建了一个Click 事件处理程序? 答:当在设计视图中双击一个控件时,IDE会自动为默认事件创建一个事件处理程序。课堂练习:创建和使用ToolBar控件 8)为什么不能向ToolBar 按钮添加图像呢? 答:ToolBar 控件将ImageList 控件作为图像源。使用ToolBar 控件的ImageList 属性指定Toolbar 将从哪个ImageList 控件获取图像。 13)运行应用程序。单击工具栏按钮时有事情发生吗?必须处理什么事件以响应单击ToolBar按钮? 答:ToolBar 的ButtonClick事件用来处理ToolBar按钮的单击。ToolBarButtonClickEventArgs 用来确定单击了哪个按钮。 课堂练习:在运行时添加和移除控件 ●添加新控件 6)为什么decimalCheckBox 出现在GroupBox1控件的左上角? 答:控件位置属性的默认坐标X和Y的值均为零。 课堂练习:在运行时更新菜单 ●使用另一个MainMenu 9)什么时候能在一个应用程序中使用多个MainMenu 控件? 答:在应用程序的上下文改变或者应用程序有多种状态时,使用(显示)多个MainMenu 对象会很有帮助。 ●将一个ContextMenu 分配给一个控件。 5)如何找出哪个控件与ContextMenu 有关联? 答:ContextMenu.SourceControl 属性获取显示快捷方式菜单的控件。 ●找出与ContextMenu关联的控件

向用户窗体中添加控件

若要向用户窗体中添加控件,请在“工具箱”中查找要添加的控件,将该控件拖到窗体上,然后拖动控件上的调整柄,直至控件的外边框成为所需的大小和形状。 注意如果将控件(或若干“成组”的控件)从窗体拖回到“工具箱”,将创建该控件的一个模板,该模板可被重新使用。对于实现应用程序的标准界面,这是非常有用的功能。 向窗体添加了控件之后,可用 Visual Basic 编辑器中“格式”菜单上的命令调整控件的对齐方式和间距。 上页:Excel VBA教程:向文档中添加控件下页:Excel VBA教程:应用程序对象事件 Excel VBA Excel VBA教程:应用程序对象事件Excel VBA教程:图表对象事件 Excel VBA教程:控件和对话框事件Excel VBA教程:在某一 Microsoft Office 应用程序中控制其他 Microsoft Office 应 用程序 Excel VBA教程:创建自定义对话框Excel VBA教程:新建工作簿 Excel VBA教程:创建“用户窗体”Excel VBA教程:显示自定义对话框 Excel VBA教程:获取有关 Macintosh 关键 字的帮助 Excel VBA教程:在单元格区域中循环Excel VBA教程:如何引用单元格和区域Excel VBA教程:初始化控件属性Excel VBA教程:打开工作簿Excel VBA教程:QueryTable对象事件 Excel VBA教程:引用工作表上的所有单元格Excel VBA教程:用 A1 样式记号引用单元格 和单元格区域 Excel VBA教程:用编号引用单元格Excel VBA教程:相对于其他单元格来引用单 元格 Excel VBA教程:用 Range对象引用单元格Excel VBA教程:用快捷记号引用单元格

《在窗体中添加控件》

说课教案 课题:在窗体中添加控件 教材:中等职业学校计算机技能型紧缺人才培养规划教材—— 《中文Access2003实用教程》李耀洲等主编说课教师:杭州市电子信息职业学校黄水萍 一.教材分析 1.教材的地位与作用 “在窗体中添加控件”是李耀洲等主编的中职计算机技能型紧缺人才培养规划教材《中文Access2003实用教程》第五章的核心内容。在前面的教学过程中学生已经掌握了设计、使用和编辑“表”对象,能够根据需要设计出合理的“查询”对象,本章的“窗体”对象起着联系数据库和用户的桥梁作用,因此学生能够设计出既美观又方便用户操作的窗体对象将对以后他们的数据库软件设计之路打好扎实的基础。 2.教材的处理 教材中只是一味地为了介绍某一控件而介绍它的使用方法,并没有给学生一个直观的能激发学生学习兴趣的实例来说明,对于我们中职的学生,学生认知水平较低,推理能力较弱,另外对于他们来说更重要的是培养他们的知识应用能力和技能,因此我把在窗体中添加控件自行设计了两个大项目来进行学习,第一个项目中包含“标签”、“文本框”、“绑定对象框”、“选项组”这些控件的使用方法,第二个项目主要介绍了“选项卡控件”和“命令按钮”控件,同时设计了一个综合练习,从而让学生能够对窗体中的常用控件有一个全面的认识。现在我正针对第二个项目的学习进行说课。 3.教学目标的确定 在中职教育培养目标指导下,结合教学大纲和学生的特点,我确定本内容的教学目标如下。 ①知识目标:进一步掌握标签、文本框、绑定对象框和组合框的使用方法;理解使用选项卡和命令按钮的目的;基本掌握选项卡和命令按钮的设计方法。 ②技能目标:培养学生的观察能力;培养学生自主学习、协作学习及分析问题、解决问题的能力;培养学生对知识的应用能力。 ③情感目标:由于学生众多,层次差异较大,教师培养的小助手不但可以协助教师更有

相关文档