标题:传递图片控件参数的问题
只看楼主
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
结帖率:91.22%
已结贴  问题点数:10 回复次数:8 
传递图片控件参数的问题
我界面上有一个picturebox控件。
我一开始初始化
PicFrame.Width = 1400
后来调用一个函数,如下:
'数据显示窗口宽度初始化
Private Sub InitialGraph(ByVal Pic As PictureBox, ByVal XMin As Long, ByVal XMax As Long, ByVal YMin As Integer, ByVal YMax As Integer)
  
  intDisplayWidth = Pic.ScaleWidth - Pic.ScaleLeft - intLeftMargin - intRightMargin   '计算动态曲线显示窗口的宽度
  intDisplayHeight = Pic.ScaleHeight - Pic.ScaleTop - intTopMargin - intBottomMargin   '计算动态曲线显示窗口的宽度
  
  intPixelsPerStepInX = intDisplayWidth / (XMax - XMin) / 20  '计算每两相邻点间像素数
  'intPixelsPerStepInX = 1
  intDisplayWidth = intPixelsPerStepInX * (XMax - XMin) * 20 '重新计算动态曲线显示窗口的宽度
  
 ' PicFrame.Width = intLeftMargin + intRightMargin + intDisplayWidth  '将曲线显示窗口的宽度设为像素的整数倍
 
  Pic.Width = intLeftMargin + intRightMargin + intDisplayWidth  '将曲线显示窗口的宽度设为像素的整数倍
End Sub
调用语句:
InitialGraph PicFrame, intXMin, intXMax, intYMin, intYMax '初始化数据显示窗口宽度
调用了这个函数,发现PicFrame.Width=1065
,参数没传过去。
貌似不能这样传参数,那应该怎么传呢?谢谢!
搜索更多相关主题的帖子: 参数 显示 窗口 宽度 ByVal 
2019-01-07 16:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:2 
ByVal Pic As PictureBox

这里怎么按值传递,
本来对象,都是要按 地址传递的,修改后的结果才能被反应出来。
要求修改有反应的变量都按地址传递,你来一个按值传递。


授人于鱼,不如授人于渔
早已停用QQ了
2019-01-07 16:58
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
回复 2楼 风吹过b
怎么按地址传递?你教我
2019-01-07 17:25
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:2 
vb默认是按地址传递参数,你去掉 前缀 byval 就可以了。
要显示申明按地址,前缀是 byref

授人于鱼,不如授人于渔
早已停用QQ了
2019-01-07 17:48
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
谢谢!
Private Sub InitialGraph(ByRef Pic As PictureBox, ByVal XMin As Long, ByVal XMax As Long, ByVal YMin As Integer, ByVal YMax As Integer)
  intDisplayWidth = Pic.ScaleWidth - Pic.ScaleLeft - intLeftMargin - intRightMargin   '计算动态曲线显示窗口的宽度
  intDisplayHeight = Pic.ScaleHeight - Pic.ScaleTop - intTopMargin - intBottomMargin   '计算动态曲线显示窗口的宽度
  
  intPixelsPerStepInX = intDisplayWidth / (XMax - XMin) / 20  '计算每两相邻点间像素数
  'intPixelsPerStepInX = 1
  intDisplayWidth = intPixelsPerStepInX * (XMax - XMin) * 20 '重新计算动态曲线显示窗口的宽度
  
  PicFrame.Width = intLeftMargin + intRightMargin + intDisplayWidth  '将曲线显示窗口的宽度设为像素的整数倍
 
 ' Pic.Width = intLeftMargin + intRightMargin + intDisplayWidth  '将曲线显示窗口的宽度设为像素的整数倍
End Sub
我这样还是不行啊
2019-01-08 08:36
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:2 
经验证,无论传址还是传值都能修改传递对象的属性,没达到楼主要求,应该是逻辑思路问题。
另:设计函数或过程尽量只使用传递的参数,不要使用外部变量,这样可保证代码的可维护性和通用性。

估计你的问题是picture的scalwidth和width不一致造成的。

[此贴子已经被作者于2019-1-8 09:31编辑过]


能编个毛线衣吗?
2019-01-08 09:27
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
回复 6楼 wmf2014
PIC.Width和PIC.SCALEWidth都是1065
2019-01-08 09:57
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
得分:2 
byref 按地址传送,byval按值传送

Private Sub InitialGraph(Byref Pic As PictureBox, ByVal XMin As Long, ByVal XMax As Long, ByVal YMin As Integer, ByVal YMax As Integer)

你也可以用用函数返回新的宽度,在创给pic的。



[此贴子已经被作者于2019-1-8 10:20编辑过]

2019-01-08 10:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:2 
大致看了下,觉得你那个(XMax - XMin) / 20和(XMax - XMin) * 20不好理解,如果按像素点理解的话1400twip实际像素是93,如果除以20,则只有70,差23pixel=345twip,1400-345=1055,和你的1065隔10隔可能是你加入的其他量造成的。如果需要twip对应的是整数像素点,你只要做int(1400/15)*15=1395就是整数像素点了。

能编个毛线衣吗?
2019-01-08 20:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492556-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.315589 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved