#vb.net #graph
#vb.net #График
Вопрос:
Я пытаюсь построить график из таблицы с именем totals(). Сама программа работает нормально, но у меня возникли некоторые проблемы. Во-первых, при каждом нажатии кнопки добавляются значения и перерисовываются их. Я не хочу, чтобы они добавлялись к предыдущим значениям, я хочу, чтобы они перезаписывали значения.
Dim d1, d2, d3 As Single
Dim dieSumInt As Integer
Dim totals(17) as integer
For ptr = 1 To 10000
d1 = (Int((Rnd() * 6) 1))
d2 = (Int((Rnd() * 6) 1))
d3 = (Int((Rnd() * 6) 1))
dieSumInt = CInt((d1 d2 d3))
totals(dieSumInt) = 1
Next
Предполагается, что весь код, который у меня есть здесь, должен принимать сумму из 3 кубиков и отображать итоговые значения в графическом окне. У меня есть все графики вниз, но каждый раз, когда я нажимаю кнопку «roll», она продолжает добавлять предыдущие значения. Я не уверен, как очистить значения, чтобы получить согласованное значение, отображаемое в графике.
Dim totals(18) As Integer
Dim dashPen As New Pen(Color.Black, 1)
Public Function Max(ByVal arry() As Integer) As Integer
Max = arry(0)
For ptr As Integer = 0 To UBound(arry)
If arry(ptr) > Max Then Max = arry(ptr)
Next
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Randomize(DateAndTime.Timer)
End Sub
Private Sub rollButton_Click(sender As Object, e As EventArgs) Handles RollButton.Click
Dim d1, d2, d3 As Single
Dim dieSumInt As Integer
For ptr = 1 To 10000
d1 = (Int((Rnd() * 6) 1))
d2 = (Int((Rnd() * 6) 1))
d3 = (Int((Rnd() * 6) 1))
dieSumInt = CInt((d1 d2 d3))
totals(dieSumInt) = 1
Next
Call Plot(totals)
Call LabelGraph(totals)
End Sub
Private Sub Plot(ByVal arry() As Integer)
Dim plotColor As Color
plotColor = Color.SkyBlue
Dim plotPen As New Pen(plotColor, 5)
Dim graph As Graphics = displayBox.CreateGraphics
Dim ymax, ptr As Integer
Dim xscale, yscale, x1, y1, Dwidth, Dheight As Single
Dim myfont As New Font("courier new", 5 (displayBox.Width 100))
Dim percentArry(4) As Integer
Dwidth = displayBox.Width - 50
Dheight = displayBox.Height - 100
ymax = Max(arry)
displayBox.Refresh()
yscale = CSng(Dheight / ymax)
xscale = CSng(Dwidth / 17)
Dwidth = displayBox.Width - 50
Dheight = displayBox.Height - 70
For ptr = 0 To 4
percentArry(ptr) = CInt(arry.Max * (ptr 1) * 0.2)
y1 = Dheight - CInt((arry.Max * (ptr 1) / 5) * yscale)
graph.DrawLine(dashPen, displayBox.Left - 25, y1 4, displayBox.Right - 25, y1 4)
dashPen.DashStyle = Drawing2D.DashStyle.DashDotDot
graph.DrawString(CStr(percentArry(ptr)), myfont, Brushes.LightSlateGray, 'marking the sides
CSng(displayBox.Left - 10),
y1 3)
Next
For ptr = 3 To 18
x1 = (ptr - 2) * xscale
y1 = Dheight - (arry(ptr) * yscale)
graph.DrawRectangle(plotPen, x1 30, y1 4, xscale - 10, Dheight - y1) 'adjusting the size of the graph rectangles
Next
End Sub
Private Sub LabelGraph(ByVal arry() As Integer)
Dim graph As Graphics = displayBox.CreateGraphics
Dim myfont As New Font("courier new", 5 (displayBox.Width 100))
For ptr As Integer = 1 To 16
graph.DrawString(CStr(ptr 2), myfont, Brushes.LightSlateGray,
CSng(((displayBox.Width / 17) * ptr 5) - (ptr * 3) displayBox.Width / 35),
displayBox.Height - 60)
graph.DrawString(CStr(arry(ptr 2)), myfont, Brushes.LightSlateGray,
CSng(((displayBox.Width / 17) * ptr) - (ptr * 3) displayBox.Width / 28),
displayBox.Height - 30)
Next
End Sub
Private Sub exitButton_Click(sender As Object, e As EventArgs) Handles exitButton.Click
Me.Close()
End Sub
Private Sub Form1_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
Plot(totals)
LabelGraph(totals)
End Sub
Комментарии:
1. Думаю, вам может понадобиться дать нам немного больше контекста для этого кода? какова область видимости? При нажатии кнопок вам нужно очистить коллекцию точек данных и создать ее заново?
2. он берет сумму из 3 кубиков за 10000 бросков и отображает итоговые значения.