2015-10-19 2 views
0

В тестовом приложении, которое я строил, я наткнулся на эту ошибку при попытке нарисовать диаграмму. У меня есть некоторые псевдо-случайным образом сгенерированные данные, происходит сбой моего тестового приложения при попытке нарисовать диаграмму Ганта ...TeeChart Диаграмма Ганта «System.ArgumentOutOfRangeException была необработанной»

System.ArgumentOutOfRangeException был необработанное HResult = -2146233086 Message = Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции . Имя параметра: индекс ParamName = индекс Источник = mscorlib StackTrace: в System.ThrowHelper.ThrowArgumentOutOfRangeException (ExceptionArgument аргумента, ExceptionResource ресурс) на Steema.TeeChart.Styles.Gantt.CopyNextTasks() в Steema.TeeChart.Styles.Gantt .Draw() в Steema.TeeChart.Styles.Series.DrawSeries() в Steema.TeeChart.Chart.DoDraw (Graphics3D g, Int32 First, Int32 Last, Int32 Inc) в Steema.TeeChart.Chart.DrawAllSeries (Graphics3D г) при Steema.TeeChart.Chart.InternalDraw (Graphics г, булевы noTools) при Steema.TeeChart.Chart.InternalDraw (Графика г) при Steema.TeeChart.TChart.Draw (Графика г) при Steema.T eeChart.TChart.OnPaint (PaintEventArgs ре) при System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs е, Int16 слой) на System.Windows.Forms.Control.WmPaint (сообщение & м) на System.Windows.Forms .Control.WndProc (Сообщение & м) на System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Сообщение & м) на System.Windows.Forms.Control.ControlNativeWindow.WndProc (сообщение & м) на System.Windows .Forms.NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:

Похоже, что он находится в логике рисования диаграммы TeetChart Gantt.

Мой проект находится здесь: https://www.dropbox.com/sh/haqspd4ux41n2uf/AADkj2H5GLd09oJTW-HrAVr3a?dl=0

если кто-то хочет, чтобы воспроизвести его.

Этот тестовый код правильно использовался со старой версией TeeChart 2.0.2670.26520.

Похоже, моя ошибка может быть связана с описанным здесь: Exception and endlessly growing designer generated code in InitializeComponent when using Steema TeeChart for .NET 2013 4.1.2013.05280 - What to do?

Любые идеи или предложения по денешься будет высоко ценится.

ответ

0

Это ошибка в коде, который может быть воспроизведен с помощью этого простого фрагмента кода:

Steema.TeeChart.Styles.Gantt series = new Steema.TeeChart.Styles.Gantt(tChart1.Chart); 

    tChart1.Aspect.View3D = false; 

    for (int i = 0; i < 10; i++) 
    { 
    series.Add(DateTime.Now.AddDays(i), DateTime.Now.AddDays(i+5), i, "task " + i.ToString()); 
    series.NextTasks[series.Count - 1] = series.Count; 
    } 

Когда цикл достигнет своей последней итерации (I = 9), NextTasks [9] создается до 10, индекс, который не существует (серия колеблется от 0 до 9) и вызывает ошибку индекса за пределами диапазона.Решение убедитесь, что индекс никогда не назначается, например:

const int max = 10; 
    for (int i = 0; i < max; i++) 
    { 
    series.Add(DateTime.Now.AddDays(i), DateTime.Now.AddDays(i+5), i, "task " + i.ToString()); 
    series.NextTasks[series.Count - 1] = (i < max - 1) ? series.Count : -1; 
    } 

же в вашем коде будет что-то вроде этого:

 crewSeries.NextTasks[crewSeries.Count - 1] = (crewSeries.Count == crewDataView.Count - 1) ? -1 : crewSeries.Count; 
+1

Спасибо за ответ Narcis. Кажется, я понимаю, где я ошибся. Последняя задача для каждой серии должна заканчиваться на -1. Однако я не уверен, что ваше предложение совершенно правильно. Я думаю: 'crewSeries.NextTasks [crewSeries.Count - 1] = (crewSeries.Count == crewDataView.Count - 1)? crewSeries.Count: -1; ' должно быть: ' crewSeries.NextTasks [crewSeries.Count - 1] = (crewSeries.Count <= crewDataView.Count - 1)? crewSeries.Count: -1; ' –

+0

Да, точно, вы правы. Я исправил свой ответ на использование: crewSeries.NextTasks [crewSeries.Count - 1] = (crewSeries.Count == crewDataView.Count - 1)? -1: crewSeries.Count ;. Дело не в том, что последняя задача в серии должна указывать на -1, но должна указывать на существующий индекс в диапазоне 0 до crewSeries.Count - 1. –