Foxtable(狐表)用户栏目专家坐堂 → 如何清空数组


  共有4438人关注过本帖树形打印复制链接

主题:如何清空数组

帅哥哟,离线,有人找我吗?
东坡一剑
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
如何清空数组  发帖心情 Post By:2013/10/18 21:25:00 [只看该作者]

在painter的mousedown写了如下代码想用鼠标点击在里面画直线:

Dim p As WinForm.Painter = e.Form.Controls("Painter1")
Dim g As Graphics = p.Graphics


If Vars("n") = 1 Then
    If e.Button = MouseButtons.Left Then
        points.add(New Point(e.x,e.y))
        Vars("n")=Vars("n")+ 1
    End If
ElseIf Vars("n") = 2 Then
    If e.Button = MouseButtons.Left Then
        points.add(New Point(e.x,e.y))
        Vars("n")= 1
    End If
End If

If Vars("n") > 1 Then
    Dim point() As point = points.ToArray()
    g.DrawLine(Pens.Red,point(0).x,point(0).y ,point(1).x ,point(1).y)
    p.repaint()
    points.clear()
    Vars("n") = 1
End If

 

第一条直线画完后再点击就出现错误提示:索引超出范围

请教问题出在哪里?我感觉是不是数组没有清空造成的?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/18 21:35:00 [只看该作者]

试试

Dim p As WinForm.Painter = e.Form.Controls("Painter1")
Dim g As Graphics = p.Graphics


If Vars("n") = 1 Then
    If e.Button = MouseButtons.Left Then
        points.add(New Point(e.x,e.y))
        Vars("n")=Vars("n")+ 1
    End If
ElseIf Vars("n") = 2 Then
    If e.Button = MouseButtons.Left Then
        points.add(New Point(e.x,e.y))
    End If
End If

If Vars("n") = 2 Then
    Dim point() As point = points.ToArray()
    g.DrawLine(Pens.Red,point(0).x,point(0).y ,point(1).x ,point(1).y)
    p.repaint()
    points.clear()
    Vars("n") = 1
End If


 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/10/18 21:47:00 [只看该作者]

这个应该不对,刚才我找到解了!在最后一段:红字部分改成 if points.count = 2 then 即可。原因是,当第二次点击时,因为Vars("n") = 2已经成立,此时points的添加和转换成数组将同时触发,第二个元素有可能没有添加进来就被转换成了数组,导致绿字部分的代码出错。

If Vars("n") = 2 Then
    Dim point() As point = points.ToArray()
    g.DrawLine(Pens.Red,point(0).x,point(0).y ,point(1).x ,point(1).y)
    p.repaint()
    points.clear()
    Vars("n") = 1
End If

[此贴子已经被作者于2013-10-18 21:47:48编辑过]

 回到顶部