以文本方式查看主题
- 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编辑过]
|