我試圖使用命令行編譯使用MSChart控件從這裏的示例程序: https://social.msdn.microsoft.com/Forums/vstudio/en-US/95dd2d87-3750-421c-8d3a-cf6c9055acf3/read-text-file-and-plot-xy-chart?forum=vbgeneral運行VB.Net圖表示例不能與.NET編譯v4.0.30319
的代碼也如下所示:
Imports System
Imports System.IO
Imports System.Text
Imports System.ComponentModel
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form1
Dim data As List(Of DoublePoint)
Class DoublePoint
Property X As Double
Property Y As Double
End Class
Public Shared Function RoundToSignificantDigits(ByVal x As Double, ByVal n As Integer) As Double
' adapted from http://stackoverflow.com/questions/202302/rounding-to-an-arbitrary-number-of-significant-digits
If x = 0 Then
Return 0
End If
Dim d As Double = Math.Ceiling(Math.Log10(Math.Abs(x)))
Dim power As Integer = n - CInt(d)
Dim magnitude As Double = Math.Pow(10, power)
Dim shifted As Double = Math.Round(x * magnitude, MidpointRounding.AwayFromZero)
Return shifted/magnitude
End Function
Sub LoadData(src As String)
If Not File.Exists(src) Then
Throw New FileNotFoundException(String.Format("File not found in LoadData: ""{0}""", src))
End If
data = New List(Of DoublePoint)
Dim lineNumber As Integer = 1
Dim badLines As New StringBuilder
Using sr = New StreamReader(src)
Dim parts As String()
Dim x As Double
Dim y As Double
While Not sr.EndOfStream
parts = sr.ReadLine.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
If parts.Count > 0 Then
If parts.Count = 3 Then
If Double.TryParse(parts(0), x) Then
If Double.TryParse(parts(1), y) Then
data.Add(New DoublePoint With {.X = x, .Y = y})
Else
badLines.AppendFormat("Bad line {0}: could not parse y-value {1} as a Double." & vbCrLf, lineNumber, parts(1))
End If
Else
badLines.AppendFormat("Bad line {0}: could not parse x-value {1} as a Double." & vbCrLf, lineNumber, parts(0))
End If
Else
badLines.AppendFormat("Bad line {0}: incorrect number of items ({1})." & vbCrLf, lineNumber, parts.Count())
End If
End If
lineNumber += 1
End While
End Using
'TODO: inform user of bad lines in a better way
If badLines.Length > 0 Then
MsgBox(badLines.ToString())
End If
End Sub
Sub ShowData()
Dim minX As Double = Double.MaxValue
Dim maxX As Double = Double.MinValue
Dim minY As Double = Double.MaxValue
Dim maxY As Double = Double.MinValue
Dim Chart1 As New Chart
Chart1.SuspendLayout()
Chart1.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Point
For Each p In data
Chart1.Series(0).Points.AddXY(p.X, p.Y)
If p.X < minX Then minX = p.X
If p.X > maxX Then maxX = p.X
If p.Y < minY Then minY = p.Y
If p.Y > maxY Then maxY = p.Y
Next
' attempt to get the axis limits as "neater" numbers
minX = RoundToSignificantDigits(minX, 2)
maxX = RoundToSignificantDigits(maxX, 2)
minY = RoundToSignificantDigits(minY, 2)
maxY = RoundToSignificantDigits(maxY, 2)
Chart1.Legends.Clear()
Chart1.ChartAreas(0).AxisX.IsStartedFromZero = False
Chart1.ChartAreas(0).AxisY.IsStartedFromZero = False
Chart1.ChartAreas(0).AxisX.Minimum = minX
Chart1.ChartAreas(0).AxisX.Maximum = maxX
Chart1.ChartAreas(0).AxisY.Minimum = minY
Chart1.ChartAreas(0).AxisY.Maximum = maxY
Chart1.ResumeLayout()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData("chartdata.txt")
ShowData()
End Sub
<STAThread()> _
Shared Sub Main()
'Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
使用命令: C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ VBC.EXE Prog.vb
VB編譯然後引發錯誤 「圖表類型沒有定義」,我已經做了在上面的代碼中爲「Imports Sy stem.Windows.Forms.DataVisualization.Charting「 Chart1對象的聲明也存在一些問題。
任何幫助表示讚賞。
chartdata.txt包含的數據如: 0.0000E + 0 \t -144.0000E -3- \t -151.5304E -3- 24.9938E-12 \t -148.0000E -3- \t -151.6275E -3- 21.78E-12 \t -148.0000E-3-151.6275E -3- 21.78E-12-148.0000E-3-151.6275E -3- 49.9875E-12 \t -150.0000E -3- \t -151.7454E -3- 74.9813E-12 \t -150.0000E -3- \t -151.8030E-3 – user3051677
你似乎在以艱難的方式做事 - 有IDE可用,例如Visual Studio 2015 Community Edition是免費的,這使得開發起來更容易*。 –
現在我的系統上沒有IDE。在IDE中執行此操作將採用與上述任務相同的代碼。 – user3051677