2016-06-29 17 views
0

チャートに複数のタイトルを同じ高さで配置するにはどうすればよいですか?VB.NET Windowsフォームのチャートで同じ高さの複数のタイトル

私が選んだパラメータに関係なく、これに似た結果が得られます。私の最後の試みはここに尋ねる前に。

スクリーンショットは、私が期待したことを証明するバックカラーのタイトルを示しています。 2タイトルを追加するたびに、WinFormsはそれらを異なる高さに自動的に配置します。

私は結果として持っているものをあなたに示すために、3.ラインがカスタム追加されています。

私はメソッドを書くことができましたが、イベントのサイズを変更するために反応し、ドッキングやアラインメントでこれを解決する必要があります。

titles

私は、私は彼らがのChartAreaの上になりたいなどDockingOffsetsで周りいじったので、だから、今のタイトルはのChartAreaの内側にあります。私は、異なるパラメータで二回、このメソッドを呼び出すと、私のタイトルのコレクションに追加します

Friend Function CreateTitle(ByVal titleName As TitleName, ByVal chart As Chart) As Title 
     Dim font As Font = Nothing 
     Dim foreColor As Color = Nothing 
     Dim backColor As Color = Nothing 
     Dim alignment As ContentAlignment = Nothing 
     Dim dockingOffset As Integer 
     Dim name As String = String.Empty 
     Dim titleText As String = String.Empty 
     Dim dockedToChartArea As String = String.Empty 
     Dim docking As Docking = Nothing 

     ' Default settings 
     font = New Font("Arial", 12) 
     foreColor = color.blue 
     dockingOffset = 0 
     dockedToChartArea = chart.ChartAreas(0).Name 

     ' Custom settings 
     Select Case titleName 
      Case ChartControls.TitleName.ComponentName 
       name = TITLENAME_COMP 
       titleText = chart.Name 
       alignment = ContentAlignment.BottomLeft 
       dockingOffset = 0 
       docking = DataVisualization.Charting.Docking.Top 
       backColor = Color.Coral 

      Case ChartControls.TitleName.TrafficLight 
       name = TITLENAME_TRAFFICLIGHT 
       titleText = "+34.6%/1800 €" 
       alignment = ContentAlignment.TopRight 
       dockingOffset = 0 
       docking = DataVisualization.Charting.Docking.Top 
       backColor = Color.Beige 
     End Select 

     Dim title As New Title(titleText) 
     title.Name = name 
     title.Font = font 
     title.ForeColor = foreColor 
     title.BackColor = backColor 
     title.Alignment = alignment 
     title.Position = New ElementPosition() 
     title.Docking = docking 
     title.DockingOffset = dockingOffset 
     title.DockedToChartArea = dockedToChartArea 

     Return title 
    End Function 

は、ここに私のコードです。

+0

私の一時的な解決策は、ダミーのタイトルを追加して、チャートとチャートエリアの間にスペースを確保しています。チャートの周りにパネルを配置し、そのパネルに2つのラベルを追加します。私は、パネルの幅とラベルの幅に応じてラベルの位置を設定します。あなたが解決策に興味があるなら、私はそれを私の好みの方法ではなく答えとして入れるでしょう。とにかくうまく動作します。 –

+0

うまくいけば、何が間違っていますか?あなたはそれに関する問題を予期していますか?もしそうなら、それはあなたにこれらの予想される問題を考慮に入れた解決策を提供するという点で知ることが重要です。 – Rodger

+0

何も問題ありません。しかし、私は平易な古いラベルを使用して、チャートタイトルコレクションの代わりに必要に応じて配置するので、「ハッキングされた」ソリューションです。そのため、「ハッキングされていない」解決策は好ましくありません。少なくともそれが私が好むものです。 –

答えて

0

要件のために回避策を変更する必要がありました。ラベルが異なるサイズと位置を必要とするため、グラフの量に応じてサイズが異なる1 ... nグラフの回避策を作成するのは非常に時間がかかるでしょう。だから私はより良い解決策を見つけなければならなかった。

私は2つの異なるタイトルの列挙型を持っています。以下のプロパティが重要です。

  • 背景色の透明=
  • つだけのタイトルのためのカスタム位置を選択してください。これにより、プロパティ "Position.Auto"がfalseになります。最後にif節を見てみましょう。そのため、他のプロパティ "Position.Auto"は手動で変更しないので真のままなので、他のタイトルを同じ高さに手動で移動させながらオフセットを割り当てることができます。

`Friend Function CreateTitle(ByVal titleName As TitleName) As Title 
      Dim titleText As String = String.Empty 
      Dim alignment As ContentAlignment 

     ' Custom settings 
     Select Case titleName 
      Case ChartControls.TitleName.Title1 
       titleText = "Title1" 
       alignment = ContentAlignment.MiddleLeft 

      Case ChartControls.TitleName.Title2 
       titleText = "Title2" 
       alignment = ContentAlignment.TopRight 
     End Select 

     Dim title As New Title() 
     title.Text = titleText 
     title.Font = New Font("Arial", 12) 
     title.BackColor = Color.Transparent 
     If titleName.Equals(CCT.ChartControls.TitleName.Title2) Then 
      title.Position = New ElementPosition(0, 3, 94, 5) 
     Else 
      title.DockingOffset = 0 
     End If 
     title.Alignment = alignment 

     Return title 
    End Function` 

同じ高さに2つのタイトルがあります。 Result

関連する問題