Vb.net 如何画一条线并拖动&;调整它的大小?
我想在PictureBox控件上画一条线(更准确地说,是一个箭头)。(不为图像本身画一条线) 然后,我想抓取这条线,移动它并通过拖动来调整它的大小(改变它的X,Y,X',Y') 我该怎么做 我想,首先,我应该画一条线,把画的线作为一个独立的对象。。。但是我只有一个概念,没有实际的概念 下图是我找到的一个示例,但无法实现 这正是我想做的。绘制箭头、移动、调整大小和擦除Vb.net 如何画一条线并拖动&;调整它的大小?,vb.net,winforms,draw,Vb.net,Winforms,Draw,我想在PictureBox控件上画一条线(更准确地说,是一个箭头)。(不为图像本身画一条线) 然后,我想抓取这条线,移动它并通过拖动来调整它的大小(改变它的X,Y,X',Y') 我该怎么做 我想,首先,我应该画一条线,把画的线作为一个独立的对象。。。但是我只有一个概念,没有实际的概念 下图是我找到的一个示例,但无法实现 这正是我想做的。绘制箭头、移动、调整大小和擦除 您可以在设计时和运行时使用LineShape控件在窗体或容器上绘制水平、垂直或对角线 Imports Microsoft.Vis
您可以在设计时和运行时使用
LineShape
控件在窗体或容器上绘制水平、垂直或对角线
Imports Microsoft.VisualBasic.PowerPacks
Dim canvas As New ShapeContainer
Dim theLine As New LineShape
' Set the form as the parent of the ShapeContainer.
canvas.Parent = Me
' Set the ShapeContainer as the parent of the LineShape.
theLine.Parent = canvas
' Set the starting and ending coordinates for the line.
theLine.StartPoint = New System.Drawing.Point(0, 0)
theLine.EndPoint = New System.Drawing.Point(640, 480)
在设置
起点
和终点
时,使用PictureBox.Position.X
,PictureBox.Size.Height
和PictureBox.Size.Width
作为X,Y坐标。我不会提供确切的代码,而是提供您需要遵循的步骤序列。希望你能从那里学到:
DrawingCanvas
或ArrowsPond
或其他任何名称DoubleBuffered
属性设置为True
以进行平滑绘制Arrow
的全局类
(而非结构
),该类具有点
类型的两个属性开始
和结束
。声明一个全局列表(箭头)
以存储所有箭头位置OnMouseDown()
。在此处将名为IsMouseDown
的全局标志设置为True
。将名为MouseDownPos
的Point
类型的全局变量设置为e.Location
OnMouseUp()
。如果IsMouseDown
为True
,则将其设置为False
,并使用Start=MouseDownPos
和End=e.Location
向列表中添加一个新的箭头
IsMouseDown
为True
,请调用Me.Invalidate()
OnPaint()
并使用Graphics.DrawLine()方法绘制列表中的所有箭头
OnMouseMove()
中,如果IsMouseDown
为False
,请检查e.Location
是否足够靠近列表中的任何起点或终点。您可以使用简单的欧几里德距离来实现这一点,并设置任意阈值(比如10像素)以更客观的方式定义“足够近”。如果找到这样一个点,请将其引用存储在名为Arrow
的全局变量中,并在鼠标下将光标形状设置为Resize,以指示用户现在可以拖动该点。如果未检测到任何闭合点,请将鼠标下的箭头设置为无
并将光标重置回默认值
。您需要最后一个名为IsOnHead
的Boolean
类型的全局变量来跟踪鼠标是否靠近箭头的头部或尾部
OnMouseMove
中,如果IsMouseDown
为True
且鼠标下的arrow
不是Nothing
,则不执行上面列出的常规操作,根据IsOnHead
和调用Invalidate()
将鼠标下arrow的Start
或End
属性设置为e.Location
这只是你需要做的事情的基本框架,有很多你想玩的可能性。要绘制箭头,您需要使用
笔
属性。如果没有代码,我们就帮不上忙。从这样的地方开始