Вы должны создать собственный UserControl и использовать краску даже рисовать на поверхности управления. Событие Paint предоставляет вам объект Graphics, который вы можете использовать для рисования графика. Однако важно знать, что вам нужно будет поменять ось Y. В окнах верхний левый экран равен 0,0, а не внизу слева.
Так, например, следующий код будет рисовать оси х и у графа на Contorl:
Public Class CartesianGraph
Public Property BottomLeftExtent() As Point
Get
Return _bottomLeftExtent
End Get
Set(ByVal value As Point)
_bottomLeftExtent = value
End Set
End Property
Private _bottomLeftExtent As Point = New Point(-100, -100)
Public Property TopRightExtent() As Point
Get
Return _topRightExtent
End Get
Set(ByVal value As Point)
_topRightExtent = value
End Set
End Property
Private _topRightExtent As Point = New Point(100, 100)
Private Sub CartesianGraph_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim extentHeight As Integer = _topRightExtent.Y - _bottomLeftExtent.Y
Dim extentWidth As Integer = _topRightExtent.X - _bottomLeftExtent.X
If (extentHeight <> 0) And (extentWidth <> 0) Then
If (_bottomLeftExtent.Y <= 0) And (_topRightExtent.Y >= 0) Then
Dim xAxis As Integer = e.ClipRectangle.Height - (_bottomLeftExtent.Y * -1 * e.ClipRectangle.Height \ extentHeight)
e.Graphics.DrawLine(New Pen(ForeColor), 0, xAxis, e.ClipRectangle.Width, xAxis)
End If
If (_bottomLeftExtent.X <= 0) And (_topRightExtent.X >= 0) Then
Dim yAxis As Integer = e.ClipRectangle.Width * _bottomLeftExtent.X * -1 \ extentWidth
e.Graphics.DrawLine(New Pen(ForeColor), yAxis, 0, yAxis, e.ClipRectangle.Height)
End If
End If
End Sub
End Class
Слово "декартова" не поможет вам в вашем поиске. просто используйте термин «x-y plot». Декартово - это импликация и редко упоминается. Есть много примеров, если вы это сделаете. –
@jaime показалось мне, что ваше редактирование превратило это в вопрос о простых x-y разбросах. Я думаю, что OP хочет иметь возможность создавать собственные 2D-чертежи – MarkJ
@user вам нужно создать собственные 2D-чертежи или просто стандартный график рассеяния x-y? – MarkJ