实时图表在从多个文本框的VB Visual Studio接收数据时进行更新

问题描述 投票:0回答:1

我正在研究的项目中有一个图表,我需要在输入每个文本框时更新其值,以便用户可以跟踪线性。

我可以用我的基本知识想到的唯一方法是在输入的每个文本框值处都计算图表,但这对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
vb.net linechart dynamic-chart-series
1个回答
0
投票

您可以为每个文本框订阅事件“ 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
© www.soinside.com 2019 - 2024. All rights reserved.