-
VB中对象随窗体而改变大小的方法总结
2009-05-15 17:41:00VB中对象随窗体而改变大小的方法总结L0ftFC 前些时在做VB的编程研究时,发现一个问题:针对某一窗体(FORM),若它在运行过程中人为改变其大小(即Resize),如何让该窗体内的对象也随之改变呢?于是对此鄙人做了...VB中对象随窗体而改变大小的方法总结
L0ftFC
前些时在做VB的编程研究时,发现一个问题:针对某一窗体(FORM),若它在运行过程中人为改变其大小(即Resize),如何让该窗体内的对象也随之改变呢?于是对此鄙人做了一下的一个方法小总结,仅供参考,如有遗漏,请见谅,如有高见,请不吝惜赐教。
问题的核心是要等比缩放对象,所以关键应该在如何改变对象的大小上。而针对不同的对象,也有当然有其不同的方法,在此我暂将对象分为两类:1.固有对象;2.构造对象。
1.固有对象:
即VB本身提供的对象接口,它们是实体对象,且君有其固定的属性值,并且属性值只可修改而不能创造的这一类对象。例如:CommandButton , Textbox , Label,PictureBox 等。
针对固有对象的特性,很自然想到用类来进行对象放缩,一下是我的一个操作方案:
A.定义类(即比例尺):
'定义一个类用于保存每个控件的放大比例
Type MyControl
mcTop As Single
mcLeft As Single
mcHeight As Single
mcWidth As Single
End Type
定义这样一个类的目的,就是在窗体加载时记录下窗体内的对象和窗体初始时的比例尺。
B.初始化类(获取比例尺):
'用于在form_load时初始化控件与窗体的初始比例,用于以后原始比例放大
Private Function InitMycont(Obj As Control, mcControl As MyControl)
mcControl.mcLeft = Obj.Left / Form1.ScaleWidth
mcControl.mcTop = Obj.Top / Form1.ScaleHeight
mcControl.mcWidth = Obj.Width / Form1.ScaleWidth
mcControl.mcHeight = Obj.Height / Form1.ScaleHeight
End Function
这样针对该类,我现在便有了一个初始化操作了。
C.按类的记录改变对象的属性(按比例尺缩放):
'用于在form_resize时对控件进行比例放大
Private Function ChangeMycont(Obj As Control, mcControl As MyControl)
Obj.Left = mcControl.mcLeft * Form1.ScaleWidth
Obj.Top = mcControl.mcTop * Form1.ScaleHeight
Obj.Width = mcControl.mcWidth * Form1.ScaleWidth
Obj.Height = mcControl.mcHeight * Form1.ScaleHeight
End Function
经过以上三步后,我便有了一个完整的面向缩放对象的编程方式(包含类及其基本操作)了,但我们该如何使用这个类呢?没错,初始化一定是在窗体加载(Form_Load)时使用,而改变大小操作就放在窗体改变(Form_Resize)时操作啦!代码如下:
'调用InitMycont()函数初始化放大比例
Private Sub Form_Load()
a = InitMycont(Command1, mcControl(1))
b = InitMycont(Text1, mcControl(2))
End Sub
'调用changMycont()函数进行按比例的放大
Private Sub Form_Resize()
a = ChangeMycont(Command1, mcControl(1))
b = ChangeMycont(Text1, mcControl(2))
End Sub
以上便实现了固有对象的大小变化。
2.构造对象
即针对于VB中的图形编程而言的,特别是那些直接在窗体上所做的图形(因为倘若在PictureBox中做图,仍然属于固有对象的范畴)。对于固有对象,当窗体缩小以至于比固有对象还小时,固有对象仅仅是被遮盖了,当窗体放大后,对象仍然完整。但是对于图形等构造对象而言,即使窗体再放大,原来的图形一旦被遮盖,就无法像固有对象一样依旧完整了。
当然,凡事有弊必有利。既然图形本身是可重构的,为何不在窗体改变时重新构造原有的图形呢?
VB在做图形编程时,有两种方法:1.绝对坐标;2.自定义坐标。然而VB中的自定义坐标本身就是一个相对值集合,即无论窗体怎么变化,坐标的值是相对值,值是不变,那么我们在这样一个坐标下所做的图形本身就具有随窗体大小改变的能力。于是,我自创了如下方法:
A.根据需求建立自定义坐标:
e.g: Scale (-1, 1)-(1, -1) ‘建立了一个自定义坐标
注:VB默认的x轴正方向是向右没问题,但是y轴正方向是向下的,所以想定义一个标准笛卡尔坐标系(即直角坐标系,y轴正方向向上),起始点与终止点的y坐标正好反过来了。
B.利用图形工具(PSet,Circle,Line)作“持久图形”
e.g: AutoRedraw = True
Circle (x, y) ‘画一个可持久的圆
注:这里“可持久”并非真的持久不变,只是将图形的AutoRedraw打开了。这样该图形在每一次被加载时都会重画一次,再加上自定义坐标的相对性,于是每改变一次,图形都会根据当前坐标再做一次图,图形就能够缩放了。不过这里的AutoRedraw 属性只针对一个图形,假若有两个图形同时产生,想要它们均可重画,必须对每个图形定义前加上“AutoRedraw = True”
e.g: AutoRedraw = True
Circle (50, 50), 30 '一个实心圆(持久图形)
AutoRedraw = False
Circle (70, 70), 10 '一个实心圆(临时图形)
-
DataGridView在vb.net中的操作技巧
2015-03-06 15:36:34DataGridView在vb.net中的操作技巧 目录: 1、 取得或者修改当前单元格的内容 2、 设定单元格只读 3、 不显示最下面的新行 4、 判断新增行 5、 行的用户删除操作的自定义 6、 ...DataGridView在vb.net中的操作技巧
目录:
-
VB中关于statusbar状态条随FORM变化的问题,以及如何设置toolbar
2005-11-05 22:17:001.在Form的Resize()方法中添加代码即可实现状态条随FORM变化Private Sub MDIForm_Resize() Me.StatusBar1.Panels(1).Width = Me.Width / 3 Me.StatusBar1.Panels(2).Width = Me.Width / 3 Me.StatusBar1.Panels(3...1.在Form的Resize()方法中添加代码即可实现状态条随FORM变化
Private Sub MDIForm_Resize()
Me.StatusBar1.Panels(1).Width = Me.Width / 3
Me.StatusBar1.Panels(2).Width = Me.Width / 3
Me.StatusBar1.Panels(3).Width = Me.Width / 3
End Sub2.关于添加toolbar的设置.
先放一个imagelist 在它的右键属性里设置几个图标
然后放一个toolbar,右键toolbar属性设置,选择General-->imageList选择imagelist1HotImageList选择imagelist1,然后到Buttons->image中选择imagelist中的图符1,2,3,4.
-
vb窗体中控件自动随窗体变化大小源代码
2007-04-05 10:06:00http://qian21h.bokee.com/viewdiary.15356105.htmlPrivate Sub Form_Resize()txt.Top = 200txt.Height = Me.Height - 1500 - txt.Toptxt.Left = 400txt.Width = Me.Width - 1000 - txt.LeftEnd Subhttp://qian21h.bokee.com/viewdiary.15356105.html
Private Sub Form_Resize()
txt.Top = 200
txt.Height = Me.Height - 1500 - txt.Top
txt.Left = 400
txt.Width = Me.Width - 1000 - txt.Left
End Sub -
VB将一张图片按比例缩放显示在一个Form或图像控件中
2021-01-31 00:24:10Private Sub Form_Resize() Call Image_Scaling(Me, App.Path & “\1.jpg”) End Sub '函数(显示图片的容器,图片路径) Private Sub Image_Scaling(P As Object, URL As String) Dim RX1 As Long, RY1 As Long, ... -
VB程序!
2014-02-23 15:31:34vb6中控件没有anchor与dock属性,窗体变大后原来要在resize中调整控件的move属性,否则就面目全非了.网上找到一些调整控件大小的代码,发现并不太适合自己,于是按照思路自己做了一个类似anchor属性的类模块。 ... -
vb.net 中最小化到托盘和锁定窗体大小的问题(notifyIcon的两个重要属性)
2014-02-14 08:59:52最小化到托盘需要用到 NotifyIcon 控件,从工具箱中找到并添加,其余代码如下: '最小化到右下角 & 锁定窗口大小 Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles ... -
VB 平滑滚动条控件源码
2012-12-07 14:37:53VB自制控件大致运行顺序 init-Resize - readproperty - let-get-paint 代码中一些函数位置没有进行整理, 可能会有点乱 -
Access2000 Resize窗体自适应程序access2000
2005-12-02 10:36:26写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构... -
Access97 Resize窗体自适应程序access2000
2005-12-02 10:36:26写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构... -
VB窗口图表化
2012-01-19 15:24:56'本模块为实现托盘图标的模块 , 他在主窗体的form_resize和 form_unload中存在,看以下例子. 'Private Sub Form_Resize() 'If Me.WindowState = vbMinimized Then ' If tptb.show_yes = False Then ' ....