VB.NET Windows窗体图表中相同高度的多个标题

时间:2016-06-29 12:19:17

标签: vb.net winforms charts data-visualization

如何将多个标题放入同一高度的图表中?

无论我选择什么参数,我都会得到类似的结果。我在问这里之前的最后一次尝试。

屏幕截图显示带有背景颜色的标题,以证明我的预期。 每当我添加2个标题时,WinForms会自动将它们置于不同的高度。

3.自定义添加行以显示我想要的结果。

我可以写一个方法,但它应该对resize事件做出反应,并且首选对接或对齐来解决这个问题。

titles

所以现在标题都在图表区域内,因为我正在摆弄DockingOffsets等。我希望它们位于图表区域之上。

这是我的代码:

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

我用不同的参数调用此方法两次,并将它们添加到我的标题集合中。

1 个答案:

答案 0 :(得分:0)

由于要求,我不得不改变我的解决方法。如果根据图表的数量大小不同,那么使我的解决方法适用于1 .. n图表会非常耗时,因为标签需要不同的大小和位置。所以我必须找到一个更好的解决方案。

我有一个有2个不同标题的枚举。以下属性很重要。

  • Backcolor =透明
  • 仅对一个标题选择自定义位置。这将改变财产状况" Position.Auto"为假。最后看一下我的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