VB中插入的图片时已经设置好Autosize为ture,怎么还是不能自动调整大小?

VB中插入的图片时已经设置好Autosize为ture,怎么还是不能自动调整大小?,第1张

控件的AutoSize设为True的意思,是让框随的大小而改变自身的大小,而不是让随框的改变而调整大小。如果你要实现后一种目的,应该改用Image控件,并且把Stretch属性设为True

题目错了吧?应该是
stretch属性设置为true时,图形可自动改变大小以适应图像框控件
而框(注意不是图像框)的autosize属性设为true时,框可自动改变大小以适应其中的。

Label1AutoSize
=
True
'标签自动调整大小,使其宽度与内部文字保持一致,这样居中后会比较美观;
Label1Left
=
(MeScaleWidth
-
Label1Width)
\
2
'意思就是标签的左边距等于窗体的内部宽度减去标签的宽度再除以2,这样标签就居中了。
还有一种方法:
Label1AutoSize
=
False
Label1Alignment
=
2
Label1BackStyle
=
0
Label1Left
=
0
Label1Width
=
MeScaleWidth

框控件没有滚动条,也不能伸缩被装载的来适应框的大小,但可以设置其autosize属性为true,使得框自动调整大小与所显示的匹配,autosize属性默认为false,表示框不能自动改变大小来适应其中的,加载的保持原始尺寸若所加载的比控件大,则超出部分将被裁剪掉。如果要用autosize属性值设置为true的框,设计窗体的时候就需要特别的小心,此时将不考虑窗体上其他控件的大小而调整大小,可能会覆盖其他控件。

可以用代码实现。
以下代码是我原来做过的实例里剪出来的,你可以参考一下,imgPreview 为Image对象。
Private Type PreviewSize
sngLeft As Single
sngTop As Single
sngWidth As Single
sngHeight As Single
intZoon As Integer
End Type
Private muPreviewSize As PreviewSize
Private Const cmChangeSize = 12
'// 缩小
Private Sub Command1_Click()
With muPreviewSize
intZoon = intZoon - 1
sngHeight = sngHeight / cmChangeSize
sngWidth = sngWidth / cmChangeSize
imgPreviewStretch = True
imgPreviewMove sngLeft, sngTop, sngWidth, sngHeight
'// 如果已经缩小了9倍则缩小按钮不可用
If intZoon < -9 Then
Command1Enabled = False
Command2Enabled = True
Else
Command2Enabled = True
End If
End With
End Sub
'// 放大
Private Sub Command2_Click()
With muPreviewSize
intZoon = intZoon + 1
sngHeight = sngHeight cmChangeSize
sngWidth = sngWidth cmChangeSize
imgPreviewStretch = True
imgPreviewMove sngLeft, sngTop, sngWidth, sngHeight
'// 如果已经放大了9倍则放大按钮不可用
If intZoon > 9 Then
Command2Enabled = False
Command1Enabled = True
Else
Command1Enabled = True
End If
End With
End Sub
Private Sub Form_Load()
With muPreviewSize
intZoon = 0
'// + 05 为Image的边框
sngHeight = imgPreviewHeight + 05
sngWidth = imgPreviewWidth + 05
sngLeft = imgPreviewLeft
sngTop = imgPreviewTop
End With
End Sub

使用Label控件和MSHFlexGrid控件结合方法使MSHFlexGrid的高度适应字体大小。
1 方法介绍
11 Label控件
从学VB6开始就接触了Label控件,对该控件的熟悉程度毋容置疑,本文所讨论的方法既是利用该控件完成。
Label控件的AutoSize属性可以使Label自动适应其Caption属性中字符的大小,在编写程序时,可以将AutoSize属性设为True,从而使Label具有自适应的能力。
12 MSHFlexGrid控件
MSHFlexGrid控件是一个很好用的表格控件,拥有强大的功能、众多的属性,可以根据需要设置,这里不再详述,只说明一下其控制网格宽度的属性,即ColWidth。
例如,需要设置MSHFlexGrid第一列的宽度为500,则可以使用下面的语句:
MSHFlexGrid1ColWidth(0)=500
注意,MSHFlexGrid的第一列的Index为0,第一行的Index为0,这个需要特别留心,特别是从Excel读入数据时,需要一定的转换,否则可能出现数据读入错误的表格的情况发生。
13 Label与MSHFlexGrid的结合
本小节具体讨论如何用Label控件使MSHFlexGrid具有自适应的能力。
1)新建MSHFlexGrid1和Label1,将Label1的AutoSize属性设为True,Label1的Visibel属性设为False。
2)从文件中读入数据(如何设置MSHFlexGrid1以及读入代码不再详述),在将数据读入网格的同时也将数据读入标签(即将Label1的Caption属性设为数据)。
3)判断当前列的宽度是否小于Labe1的宽度,如果是,则将其宽度设为Label1的宽度,即
if MSHFlexGrid1ColWidth(0)<Label1width then
MSHFlexGrid1ColWidth(0)=Label1width 。
4)以此类推,实现每一列的宽度的自动适应。
2 缺点与优化
21 缺点
由于需要将所有数据都要放到Label1的Caption中,代码运行效率将大大降低
22 优化
可以建立数组,记录每一列的最大宽度(即Label1的最大宽度),在程序将所有数据读入后再修改网格的宽度,这样可以提高其运行效率。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12977969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存