2011-01-20 8 views
0

私は古いDundasチャートコンポーネント(ver 7)を使って簡単な体温計のようなチャートを生成するコードをいくつか持っています。System.Web.UI.DataVisualization.Chartingでカスタムラベルの幅を制御する方法

'Imports Dundas, Dundas.Charting, Dundas.Charting.WebControl 
Public Shared Function GetSimpleThermometerChart(ByVal currentValue As Integer, ByVal goalValue As Integer) As Stream 
    If goalValue < 0 Then goalValue = 0 
    If currentValue < 0 Then currentValue = 0 
    If currentValue > goalValue Then currentValue = goalValue 

    Dim red = Drawing.Color.FromArgb(255, 192, 80, 77) 
    Dim chart1 = New Chart() 
    Dim series1 = chart1.Series.Add("Series1") 
    Dim defaultArea = chart1.ChartAreas.Add("Default") 

    With chart1 
     .Legends(0).Enabled = False 
     .Height = New System.Web.UI.WebControls.Unit(200) 
     .Width = New System.Web.UI.WebControls.Unit(275) 
    End With 

    With defaultArea 
     .BorderStyle = ChartDashStyle.Solid 

     ' Y-axis 
     .AxisY2.MajorGrid.Enabled = True 
     .AxisY2.Interval = goalValue/2 
     .AxisY2.Maximum = goalValue 
     .AxisY2.LabelStyle.Interval = goalValue 
     .AxisY2.MajorTickMark.Interval = goalValue/2 
     .AxisY2.MajorTickMark.Enabled = False 
     .AxisY2.LabelStyle.Font = New System.Drawing.Font("Tahoma", 10) 
     .AxisY2.CustomLabels.Add((goalValue * 0.45), (goalValue * 0.55), String.Format(" You're half way to your goal of {0}!", goalValue)) 
     .AxisY2.CustomLabels.Add((goalValue * 0.9), (goalValue * 0.99), String.Format(" You met the goal of {0}!!!", goalValue)) 

     ' X-axis 
     .AxisX.MajorGrid.Enabled = False 
     .AxisX.Maximum = 1 
     .AxisX.Minimum = 0.8 
     .AxisX.LabelStyle.Enabled = False 
     .AxisX.MajorTickMark.Enabled = False 
    End With 

    ' Populate series data 
    Dim pt1 = New DataPoint(1, currentValue) 
    series1.Points.Add(pt1) 

    With series1 
     .Type = SeriesChartType.Column 
     .Color = red 
     .YAxisType = AxisType.Secondary 
    End With 

    Dim memStrm As New MemoryStream() 
    chart1.Save(memStrm, ChartImageFormat.Png) 
    memStrm.Position = 0 
    Return memStrm 
End Function 

このコードによって生成チャートは右Y軸上のカスタムラベルの完全な、非切り捨てられたテキストを左に素敵な、小さなグラフを示しています。ここではそのコードです。

は、Microsoftが買収し、.NET 4.0フレームワークにダンダスのチャートコンポーネントを統合し、私はチャートは同じように機能かどうかを確認するためにテストされています。もちろん、私は瞬時に不一致に遭遇しました。新しいSystem.Web.UI.DataVisualization.Charting同等に上記のコードを変換するには、私は次のコードで羽目になる:

'Imports System.Web.UI.DataVisualization.Charting 
Public Shared Function GetSimpleThermometerChart(ByVal currentValue As Integer, ByVal goalValue As Integer) As Stream 
    If goalValue < 0 Then goalValue = 0 
    If currentValue < 0 Then currentValue = 0 
    If currentValue > goalValue Then currentValue = goalValue 

    Dim red = Drawing.Color.FromArgb(255, 192, 80, 77) 
    Dim chart1 = New Chart() 
    Dim series1 = chart1.Series.Add("Series1") 
    Dim defaultArea = chart1.ChartAreas.Add("Default") 

    With chart1 
     .Height = New System.Web.UI.WebControls.Unit(200) 
     .Width = New System.Web.UI.WebControls.Unit(275) 
    End With 

    With defaultArea 
     '.InnerPlotPosition.Height = 100 ' YUCK! Why??? 
     '.InnerPlotPosition.Width = 20 ' YUCK! Why??? 

     .BorderDashStyle = ChartDashStyle.Solid 

     ' Y-axis 
     .AxisY2.MajorGrid.Enabled = True 
     .AxisY2.Interval = goalValue/2 
     .AxisY2.Maximum = goalValue 
     .AxisY2.LabelStyle.Interval = goalValue 
     .AxisY2.MajorTickMark.Interval = goalValue/2 
     .AxisY2.MajorTickMark.Enabled = False 
     .AxisY2.LabelStyle.Font = New System.Drawing.Font("Tahoma", 10) 
     .AxisY2.CustomLabels.Add((goalValue * 0.45), (goalValue * 0.55), String.Format(" You're half way to your goal of {0}!", goalValue)) 
     .AxisY2.CustomLabels.Add((goalValue * 0.9), (goalValue * 0.99), String.Format(" You met the goal of {0}!!!", goalValue)) 

     ' X-axis 
     .AxisX.MajorGrid.Enabled = False 
     .AxisX.Maximum = 1 
     .AxisX.Minimum = 0.8 
     .AxisX.LabelStyle.Enabled = False 
     .AxisX.MajorTickMark.Enabled = False 
    End With 

    ' Populate series data 
    Dim pt1 = New DataPoint(1, currentValue) 
    series1.Points.Add(pt1) 

    With series1 
     .ChartType = SeriesChartType.Column 
     .Color = red 
     .YAxisType = AxisType.Secondary 
    End With 

    Dim memStrm As New MemoryStream() 
    chart1.SaveImage(memStrm, ChartImageFormat.Png) 
    memStrm.Position = 0 
    Return memStrm 
End Function 

さて、代わりに私のカスタムラベルのフルテキストを表示するには、グラフのスケーリング、グラフは太って、テキスト成長しますelipsisで切り捨てられます。私は運がないダンダスの行動をどうやって得るのか探しました。私はさまざまな設定を試みました:

With defaultArea 
    .AxisY2.IsLabelAutoFit = True 
    .AxisY2.LabelAutoFitStyle = LabelAutoFitStyles.None 
    .AxisY2.LabelStyle.TruncatedLabels = False 
End With 

これらは動作しません。私はこれを行う場合、私は仕事に行くことができるように思えてきた唯一のものは、次のとおりです。

With defaultArea 
    .InnerPlotPosition.Height = 100 ' YUCK! Why??? Seems brittle... 
    .InnerPlotPosition.Width = 20 ' YUCK! Why??? Seems brittle... 
End With 
このコードのトラブルは、私は私がの大きさについて何よりも、テキストのサイズについてもっと気にということです

グラフが表示され、テキストが常に表示されることが期待されます。この実例のテキストはハードコードされていますが、実際のシステムではグラフサイズを動的にする必要はありませんので、カスタムラベルは常にフォントサイズを拡大することなくテキストを表示します。古いDundasコンポーネントからのデフォルト動作を模倣する方法に関する提案はありますか?

答えて

3

右のプロパティをMSチャートコントロールで使用すると、何を意味するのか分かります。オブジェクト階層を歩くことは痛みをすることが、私は何を探していることは、次のコードであると考えることができます: - `.AxisY2.LabelStyle.Font =新システム

Me.Chart1.ChartAreas("Default").AxisY2.LabelStyle.Font = New System.Drawing.Font("Arial", 6) 
+1

私は実際にこのラインで設定したフォントを持っています.Drawing.Font( "Tahoma"、10) '。問題は、私はフォントが収縮するのを望んでいない、私はグラフを縮小することを好むだろう。フォントを縮小すると、テキスト全体が表示されますが、グラフを縮小することができれば、省略記号なしで10ptにテキストのための余裕ができます。私はDundasのバージョンが適切に機能するので、これを知っています。 – mattmc3

関連する問題