我正在研究的项目中有一个图表,我需要在输入每个文本框时更新其值,以便用户可以跟踪线性。
我可以用我的基本知识想到的唯一方法是在输入的每个文本框值处都计算图表,但这对12个文本框来说是很疯狂的。
当前,我可以通过按钮Click
使用它(请参见下面的代码)。但是,我希望它随着输入每个值而更新-对此的任何指导将不胜感激。
Private Sub ChartBtn_Click(sender As Object, e As EventArgs) Handles ChartBtn.Click
'Average Repeatability at 5K Test Point
Dim A5K1 As Integer = CInt(T5K1.Text)
Dim A5K2 As Integer = CInt(T5K2.Text)
Dim A5K3 As Integer = CInt(T5K3.Text)
Dim average = (A5K1 + A5K2 + A5K3) / 3
'Chart Setup
With Testpoint_Chart.ChartAreas(0)
.AxisX.Title = "Pressure (Psi)"
.AxisX.Minimum = 1000
.AxisX.Maximum = 10000
.AxisY.Interval = 1000
.AxisY.Title = "Test Points (ft.lb)"
If T10K.Text > Math.Ceiling(tst_MaxOutput.Text / 1000) * 1000 Then
.AxisY.Maximum = Math.Ceiling(T10K.Text / 1000) * 1000
Else
.AxisY.Maximum = Math.Ceiling(tst_MaxOutput.Text / 1000) * 1000
End If
End With
Testpoint_Chart.Series.Clear()
Testpoint_Chart.Series.Add("Test Data")
Testpoint_Chart.Series.Add("Max Torque")
'Max Torque
With Testpoint_Chart.Series("Max Torque")
.IsVisibleInLegend = True
.ChartType = SeriesChartType.Line
.IsValueShownAsLabel = False
.Color = Color.Red
Dim xmaxvals() As Integer = ({1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000})
Dim ymaxvals() As Integer = {tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text, tst_MaxOutput.Text}
.Points.DataBindXY(xmaxvals, ymaxvals)
End With
'Test Points
With Testpoint_Chart.Series("Test Data")
.IsVisibleInLegend = True
.ChartType = SeriesChartType.Line
.IsValueShownAsLabel = True
Dim xvals() As Integer = ({1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000})
Dim yvals() As Integer = {T1K.Text, T2K.Text, T3K.Text, T4K.Text, average, T6K.Text, T7K.Text, T8K.Text, T9K.Text, T10K.Text}
.Points.DataBindXY(xvals, yvals)
End With
End Sub
您可以为每个文本框订阅事件“ TextChanged”。这是一个带有四个textBoxes(A,B,C,D)的演示,您可以参考。在事件“ TextChanged”中,可以使用“ switch”语句来判断已更改的textBox。然后重新绑定图表的数据并进行更新。
Public Class Form1
Dim price = New List(Of Integer)
Dim brand = New List(Of String)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set initial data
Chart1.Titles.Add("Line Chart")
Chart1.ChartAreas(0).Axes(0).MajorGrid.Enabled = False
Chart1.ChartAreas(0).Axes(1).MajorGrid.Enabled = False
brand = New List(Of String) From {"A", "B", "C", "D"}
price = New List(Of Integer) From {1, 2, 3, 4}
Chart1.Series.Clear()
Chart1.Series.Add("Price")
Chart1.Series("Price").Points.DataBindXY(brand, price)
Chart1.Series(0).ChartType = SeriesChartType.Column
End Sub
' subscribe to event "TextChanged"
Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBoxA.TextChanged, TextBoxB.TextChanged, TextBoxC.TextChanged, TextBoxD.TextChanged
Select Case CType(sender, TextBox).Name
Case "TextBoxA"
price(0) = Convert.ToInt32(TextBoxA.Text)
Case "TextBoxB"
price(1) = Convert.ToInt32(TextBoxB.Text)
Case "TextBoxC"
price(2) = Convert.ToInt32(TextBoxC.Text)
Case "TextBoxD"
price(3) = Convert.ToInt32(TextBoxD.Text)
End Select
' Rebind the data
Chart1.Series("Price").Points.DataBindXY(brand, price)
' Update
Chart1.Update()
End Sub
End Class