Развейте webchartcontrol, как получить неограниченную коллекцию цветов и сохранить в массиве списка - PullRequest
0 голосов
/ 09 октября 2019

В настоящее время у меня есть 204 элемента для отображения в качестве легенды в webchartcontrol, мой текущий код может поддерживать цвет только для 150 элементов. Если больше, то ошибка «Индекс вышел за пределы допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс». Как я могу получить неограниченный цвет для хранения в массиве списка? Пожалуйста, помогите мне в этом.

Мой код

    Dim colors As List(Of String) = New List(Of String)()
    Dim colorNames As String() = System.Enum.GetNames(GetType(KnownColor))
    Dim whiteBrightness As Single = Color.FromKnownColor(KnownColor.NavajoWhite).GetBrightness()
    For Each colorName As String In colorNames
        Dim KnownColor As KnownColor = CType(System.Enum.Parse(GetType(KnownColor), colorName), KnownColor)
        Dim knownColorBrightness As Single = Color.FromKnownColor(KnownColor).GetBrightness()
        If (KnownColor > KnownColor.Transparent AndAlso knownColorBrightness < whiteBrightness AndAlso colorName.IndexOf("Gray") = -1) Then
            colors.Add(colorName)

        End If
    Next

   Dim lColor As Dictionary(Of String, String) = New Dictionary(Of String, String)


        Dim colorTracker As Integer = 0
        '''''''''''''''''''''''''
        lColor.Add("Remaining", "DarkGray")


        For Each dr In dt.Rows
            Dim series1 As New Series(dr("tool").ToString(), ViewType.StackedBar)
            series1.ValueScaleType = ScaleType.Numerical
            series1.Points.Add(New SeriesPoint(dr("ID").ToString(), dr("Process")))


            ' series1.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True
            'series1.ToolTipHintDataMember = dr("tooldata").ToString()
            series1.ToolTipPointPattern = "<span style='font-size:13px'>EQPID: {A} <br/> Recipe: {S} <br/> " + dr("tooldata").ToString() + "</span>"

            chart.Series.Add(series1)
            Dim myview1 As StackedBarSeriesView = CType(series1.View, StackedBarSeriesView)
            myview1.BarWidth = 0.5
            myview1.FillStyle.FillMode = FillMode.Solid



            'CHECK if same item, assigned same color, else assigned other color
            If lColor.ContainsKey(dr("tool").ToString()) Then
                series1.View.Color = Color.FromName(lColor(dr("tool").ToString()))

            Else

                \\error happens here in line series1.View.Color, there 
                 are 204 tool items, but the length returned for colors from  
                 knowncolor is 174, that is why the index 
                 error occurs.My problem is there any other properties that
                 contain unlimited color?

                series1.View.Color = Color.FromName(colors(colorTracker))
                lColor.Add(dr("tool").ToString(), colors(colorTracker))
                colorTracker = colorTracker + 1

            End If
            ''''''''''

        Next

1 Ответ

0 голосов
/ 11 октября 2019

ChartControl и WebChartControl поддерживают функцию Series Colorizer (доступную в v18.1 и более поздних версиях), которая позволяет определять цветовую схему Series из предопределенного набора ключей или значений источника данных. Вы должны иметь возможность использовать встроенные функции вместо ручной инициализации цвета Series.

...