各位达人,
需求是这样:根据一组坐标在picture上面画一条线(没有规律) ,用picture.line方法绘制后,,
可以达到预期效果,但是我想选中这条线,然后更改这条线的样式,,然后鼠标右键删除 现在是无法选中这条线,,,各位达人有没有好的解决办法高分奉上

解决方案 »

  1.   

    Picture1.Line画上去的 一堆密麻的线你没法判别是那条线的, 你可以使用Line控件(使用数组) 动态线上添加 1000多条也不会耗啥内存与CPU的.
      

  2.   

    要记录所画的线,用gdi++好像可yi.
      

  3.   

    "但是我想选中这条线,然后更改这条线的样式,,然后鼠标右键删除 "
    picture本身都不能选的,还要"更改线的样式,鼠标右键删除", 尝试别的方法,考虑别的控件吧. 
    呵呵,不要在这上面吊死了
      

  4.   

    第一种办法:不直接使用VB的line命令,而是使用API函数LineDDA,这样可以在回调函数里保存每条线的坐标数组,然后鼠标按下时,遍历所有线条的坐标数组,计算点到直线的距离,判断鼠标位于哪一条线上,再根据该线的坐标数组,使用不同的画笔重绘线条。
    缺点:实现较复杂,优点:速度快(可以自设双缓冲)。
    第二种办法:不直接使用VB的line命令,而是使用VB本身自带的Line控件,以动态数组方式实现。
    缺点:有闪烁现象,优点:代码实现简单。
      

  5.   

    第二种办法:不直接使用VB的line命令,而是使用VB本身自带的Line控件,以动态数组方式实现。
    缺点:有闪烁现象,优点:代码实现简单。这个办法可以
      

  6.   

    今天做了大改变,原本这个软件 我用Load动态添加了1000个PictureBox,效果还不错, 但是今天他们提出至少得4000个阀,经验证, 速度不说,慢上加慢, 可能我的本本档次不够,内存不够, 死机了几次, 我放弃了 PicturBox数组控件,现在改用 Picture1.Line来画矩形阀, 速度几乎是转眼间,本想PictureBox可以人工旋转角度的,现在只能让电脑指定角度来转着画了.楼主1000多条的线,使用Line控件 应该没问题,因为它比PictureBox占用资源少多了
      

  7.   

    楼主1000多条的线?帖子上说了么?
    Line控件能选中删除?
    楼主要的是能选中删除的线
      

  8.   

    感谢各位,,问题大概已经解决
    附上代码
    Private Declare Function ScreenToClient Lib "user32 " (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
    Private Declare Function GetCursorPos Lib "user32 " (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
                    X   As Long
                    Y   As Long
    End TypePrivate Function IsClickLine(pt As POINTAPI, oLine As Line) As Boolean
            Dim a     As Integer, b       As Integer, bret       As Boolean
            On Error GoTo psErr
          
            a = Int((pt.Y - oLine.Y1) / (pt.X - oLine.X1) * 100)
            b = Int((pt.Y - oLine.Y2) / (pt.X - oLine.X2) * 100)
            Debug.Print "a= " & a & "   b   =   " & b
            If Abs(a - b) <= 20 Then               '允许有20   的误差
                    bret = True
            End If
            IsClickLine = bret
            Exit Function
    psErr:
            '除数为0   即鼠标点到了端点
            IsClickLine = True
    End Function网上找的,,基本可以达到我要求,,
    另外,删除的话,,反色重绘一遍就可以达到效果,呵呵,偷懒了,,还是要感谢各位达人,,,