以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何清空数组  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41416)

--  作者:东坡一剑
--  发布时间: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

 

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

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


--  作者:有点甜
--  发布时间: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


--  作者:东坡一剑
--  发布时间: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编辑过]