2014-01-13 62 views
3

出現在3D,這裏是我的代碼Powershell的3D WinForms的3D圖表

[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization") 
$WeekTable = @{ 
    "Week1" = 50 
    "Week2" = 50 
} 
$WeekChart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart 
$WeekChart.Width = 1200 
$WeekChart.Height = 768 
$WeekChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle 
$WeekChartArea.Enable3D = $true 
$WeekChart.ChartAreas.Add($WeekChartArea) 
$WeekChart.Series.Add("Data") 
$WeekChart.Series["Data"].Points.DataBindXY($WeekTable.Keys, $WeekTable.Values) 
#$WeekChart.Series["Data"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie 
# Display chart on form 
$WeekChart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor 
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 
$Form = New-Object Windows.Forms.Form 
$Form.Text = "Escape Windows XP statistics" 
$Form.Width = 1024 
$Form.Height = 820 
$Form.controls.add($WeekChart) 
$Form.Add_Shown({$Form.Activate()}) 
$Form.ShowDialog() 

的圖表顯示了我的形式很好,但它不是在3D顯示。 Enable3D屬性是正確的,因爲它應該是?如果我檢查腳本何時完成

回答

3

您所看到的問題是ChartArea3DStyle不是ChartArea,因爲它不會繼承ChartArea類。但是,當您撥打$WeekChart.ChartAreas.Add($WeekChartArea)時,您正在使用它,就像是ChartArea。我不知道爲什麼那不是拋出一個異常,但它在我看來應該是這樣。

取而代之,您需要簡單地創建ChartArea,然後將其Area3DStyle property更改爲您的ChartArea3DStyle實例的值。不要將ChartArea3DStyle對象看作ChartArea,因爲它不是一個。

$Area3DStyle = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle; 
$Area3DStyle.Enable3D = $true; 
$ChartArea = $WeekChart.ChartAreas.Add('ChartArea'); 
$ChartArea.Area3DStyle = $WeekChartArea; 

3D Windows Forms Chart Screenshot

最終的腳本應該是這樣的:

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization") 
$WeekTable = @{ 
    "Week1" = 50 
    "Week2" = 50 
} 
$WeekChart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart 
$WeekChart.Width = 1200 
$WeekChart.Height = 768 
$Area3DStyle = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle; 
$Area3DStyle.Enable3D = $true; 
$ChartArea = $WeekChart.ChartAreas.Add('ChartArea'); 
$ChartArea.Area3DStyle = $Area3DStyle; 

$ChartSeries = $WeekChart.Series.Add("Data") 
$WeekChart.Series["Data"].Points.DataBindXY($WeekTable.Keys, $WeekTable.Values) 
#$WeekChart.Series["Data"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie 
# Display chart on form 
$WeekChart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor 
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 
$Form = New-Object Windows.Forms.Form 
$Form.Text = "Escape Windows XP statistics" 
$Form.Width = 1024 
$Form.Height = 820 
$Form.controls.add($WeekChart) 
$Form.Add_Shown({$Form.Activate()}) 
$Form.ShowDialog() 
+1

+1它可以代替'$ ChartArea.Area3DStyle = $ WeekChartArea;''由$ ChartArea.Area3DStyle = $ Area3DStyle ;'。我讓你編輯你的答案。 – JPBlanc

+0

感謝您的接觸,'JPBlanc'。我的錯。 –