VB程序中出现了好多的BUG,请大神们指点指点我。

qq_38929561 2017-05-25 08:31:15
我是新手,很多都不太懂,希望大神们可以帮帮忙 拜托拜托了
Private Sub Command1_Click()
    Dim i As Integer, J As Integer, t As Long
    Dim r As Long, g As Long, b As Long
    CDialog1.Filter = " 图片文件 (*.bmp;*.JPG;*.GIF)|*.bmp;*.JPG;*.GIF"
    CDialog1.ShowOpen
    If CDialog1.FileName <> "" Then
        Picture1.PictureBox = LoadPicture(CDialog1.FileName)
        ImagetoArray Picture1, ImageArray
    End If
    Picture2.Top = Picture1.Top + Picture1.Height + 10
    Picture3.Top = Picture2.Top + Picture2.Height + 10
    Picture2.Left = Picture1.Left
    Picture2.Width = Picture1.Width
    Picture3.Left = Picture1.Left
    Picture3.Width = Picture1.Width
End Sub
提示在 Picture1.PictureBox = LoadPicture(CDialog1.FileName中的PictureBox未找到方法或数据成员

Private Sub Command2_Click()
Dim i As Integer, J As Integer
Dim h As Integer, w As Integer
Dim VS() As Long
Dim gray As Integer
Dim r As Integer, g As Integer, b As Integer
h = UBound(ImageArray, 1) + 1
w = UBound(ImageArray, 2) + 1
提示 h = UBound(ImageArray, 1) + 1类型不匹配

Private Sub Command3_Click()
Dim max As Double, min As Double
Dim i As Integer
Dim h As Integer, w As Integer
Dim h1 As Integer, h2 As Integer, h0 As Integer
Dim VS() As Long

h = UBound(ImageArray, 1) + 1
w = UBound(ImageArray, 2) + 1
max = VS(0)
min = VS(0)
For i = 0 To w - 1
If max < VS(i) Then max = VS(i)
If max < VS(i) Then max = VS(i)
Next i
h1 = h0 - (VS(0) - min) / (max - min) * h0
For i = 0 To w - 1
h2 = h0 - (VS(i) - min) / (max - min) * h0
Picture2.Line (i - 1, h1)-(i, h2)
提示Picture2.Line (i - 1, h1)-(i, h2)未找到方法或数据成员
...全文
216 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38929561 2017-05-27
  • 打赏
  • 举报
回复
谢谢Chen8013大神的指教,我的问题已将解决了,非常感谢!
qq_38929561 2017-05-26
  • 打赏
  • 举报
回复
h = UBound(ImageArray, 1) + 1 =0 W = UBound(ImageArray, 2) + 1=0 ReDim VS(w - 1)下标越界  For i = 0 To h - 1 '(h-1)=-1  For j = 0 To w - 1 '(w-1)=-1  r =  0  g =0             b =0            gray = 0  VS(j) = VS(j) + gray 下标越界
qq_38929561 2017-05-26
  • 打赏
  • 举报
回复
在 h = UBound(ImageArray, 1) + 1开始 ReDim VS(w - 1)越标 VS(j) = VS(j) + gray越标
赵4老师 2017-05-26
  • 打赏
  • 举报
回复
边界条件 小心驶得万年船
舉杯邀明月 2017-05-26
  • 打赏
  • 举报
回复
引用 10 楼 qq_38929561 的回复:
h = UBound(ImageArray, 1) + 1 =0 W = UBound(ImageArray, 2) + 1=0 ReDim VS(w - 1)下标越界  For i = 0 To h - 1 '(h-1)=-1  For j = 0 To w - 1 '(w-1)=-1  r =  0  g =0             b =0            gray = 0  VS(j) = VS(j) + gray 下标越界
对你感觉太无语了………… 
h = UBound(ImageArray, 1) + 1
w = UBound(ImageArray, 2) + 1
' ★ 变量 h w 的值是 0,那是因为你的数组 ImageArray 是空数组,
'        UBound( )的函数返回值是 -1 !
ReDim VS(w - 1)
' ★  在上面这句中, w-1的结果必须为0或正数才能被执行。
' ★  结合前面的语句,w-1 = -1 ,因此会提示“下标越界”!
For i = 0 To h - 1      '(h-1)=-1
   For j = 0 To w - 1   '(w-1)=-1
      r = 0
      g = 0
      b = 0
      Gray = 0
      VS(j) = VS(j) + Gray    ' 下标越界

' ★ 既然 h-1和w-1 都是-1,那又如何进入循环体 !!!
' ★     那么,只能是在你的“人为干涉”下进入的。
' ★     因前面 Redim没有正确执行,VS是空数组,在这儿肯定会提示出错!
Tiger_Zhao 2017-05-26
  • 打赏
  • 举报
回复
ImageArray 是个空数组,UBound() 返回 -1
没创建的数组能做什么用?

既然必须编程,至少请个家教,先把基础学会了啊。
这样逻辑不通的代码根本不是BUG。
of123 2017-05-26
  • 打赏
  • 举报
回复
既然不想学,还来这里问个什么劲儿? 不如花钱请个“家教”,帮你把作业都做了。至于考试嘛,再想办法吧。 总之,这个坛子不是为不想学的人预备的。
舉杯邀明月 2017-05-25
  • 打赏
  • 举报
回复
执行哪一句时出现下标越界 ???? 你以为这些原因真的很好猜吗 ! 还有,它提示下标越界时,点“调试”,然后自己看看“下标”的变量值是多少啊! 然后自己分析一下是“变量”的循环值范围问题, 还是自己定义数组大小时,大小(数组下标上界)不合适。
qq_38929561 2017-05-25
  • 打赏
  • 举报
回复
h = UBound(ImageArray, 1) + 1 w = UBound(ImageArray, 2) + 1 ReDim VS(w - 1) For i = 0 To h - 1 For j = 0 To w - 1 r = ImageArray(i, j, 0) g = ImageArray(i, j, 1) b = ImageArray(i, j, 2) gray = 0.3 * r + 0.6 * g + 0.1 * b VS(j) = VS(j) + gray Next j Next i 请问下标越界要怎样调?
qq_38929561 2017-05-25
  • 打赏
  • 举报
回复
谢谢指点,PictureBox是我复制过来的没改名称。我对程序是不感冒,但是我们必须学,我也很无奈啊,只能硬着头皮上了。
舉杯邀明月 2017-05-25
  • 打赏
  • 举报
回复
引用 3 楼 qq_38929561 的回复:
我还是不太明白 1.将 Picture1.PictureBox 改成Picture1.Picture后依然是未找到方法或数据成员 2.是将ImageArray定义一下吗?
1. 只能说明你的“名字为Picture1”的对象,根本就是不是PictureBox控件,也不是Image控件。 2. 变量“先声明(定义)、再使用”才是良好的习惯!   变量不仅是事先声明、并且按实际需求指定为合理、正确的变量类型,是“更好”的习惯!!!   虽然VB6中的变量可以“不声明就使用”,但从我的想法来说:这种人最好远离编程算了…………   
qq_38929561 2017-05-25
  • 打赏
  • 举报
回复
请问具体的应该怎么改?
qq_38929561 2017-05-25
  • 打赏
  • 举报
回复
我还是不太明白 1.将 Picture1.PictureBox 改成Picture1.Picture后依然是未找到方法或数据成员 2.是将ImageArray定义一下吗?
舉杯邀明月 2017-05-25
  • 打赏
  • 举报
回复
楼主要注意, PictureBox和Image 这两各种控件是有区别的。 PictureBox除了显示图片之外,还支持很多“绘图方法”, 而Image控件基本上就只能用于“显示图像”,它是不支持“画”的。
舉杯邀明月 2017-05-25
  • 打赏
  • 举报
回复
1. 提示在 Picture1.PictureBox = LoadPicture(CDialog1.FileName中的PictureBox未找到方法或数据成员 正确的“对象.属性”是: Picture1.Picture 2. 提示 h = UBound(ImageArray, 1) + 1类型不匹配 UBound( ) 、 LBound( )这两个函数都是对“数组”进行操作的, 你给它传的变量名:ImageArray 它是一个“数组”吗? 3.  提示Picture2.Line (i - 1, h1)-(i, h2)未找到方法或数据成员   Picture2.Line (i - 1, h1)-(i, h2) 这句是“合法”的,   你确定你这个 Picture2 是一个“PictureBox控件”对象吗?

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧