| Цитата(Cleric @ 22.12.2005, 15:11) | | PBOX.CreateGraphics.DrawLine(PGray, pX, pY, pX, gH + 5) |
Соооовсем не так Надо передавать в метод PaintGraph объект Graphics, и рисовать используя его.
Например:
| Код | Private Sub pbGraph_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles pbGraph.Paint PaintGraph(pbgraph, Y, ..., e.Graphics) End Sub
Public Sub PaintGraph(ByVal PBOX As PictureBox, ByVal X(,) As Double, ByVal C As Drawing.Color, ByVal MaxVal As Double, ByVal TStart As Integer, ByVal TAdd As Integer, g As Graphics) ' x(t,0) - рисуется первый столбец If X Is Nothing Then Exit Sub Dim maxT As Integer = X.GetUpperBound(0) + TStart + TAdd, mX As Double = MaxVal
Dim gW As Integer = PBOX.Width - 10 Dim gH As Integer = PBOX.Height - 10
Dim t As Integer, P As New Drawing.Pen(C, 2), Pblack As New Drawing.Pen(Color.Black, 1), PGray As New Drawing.Pen(Color.Gray, 1) PGray.DashStyle = Drawing2D.DashStyle.Dash
Dim dx As Double = gW / maxT Dim ky As Double = gH / mX Dim pX As Single, pX2 As Single Dim pY As Single, pY2 As Single
For t = TStart To maxT - TAdd If t >= TStart And t <= maxT - TAdd Then pX = Convert.ToSingle(5 + t * dx) pY = gH + 5 - Convert.ToSingle(Int(X(t - TStart, 0) + 0.5) * ky) pX2 = Convert.ToSingle(5 + (t + 1) * dx) If t < maxT - TAdd Then pY2 = gH + 5 - Convert.ToSingle(Int(X(t - TStart + 1, 0) + 0.5) * ky)
If t < maxT - TAdd Then g.DrawLine(P, pX, pY, pX2, pY2)
g.DrawLine(PGray, pX, pY, pX, gH + 5) g.DrawEllipse(P, pX - 2, pY - 2, 4, 4) ' label value: g.DrawString(Int(X(t - TStart, 0) + 0.5), Font1, Brushes.Black, pX + 2, pY - 5) End If Next
' Drawing axies and so on: g.DrawLine(Pblack, 5, 5, 5, gH + 5) g.DrawLine(Pblack, 5, gH + 5, gW + 5, gH + 5) g.DrawString(mX, Font1, Brushes.Black, 5, 5) End Sub
| |