Получить максимальное значение оси из диаграмм MS C#.NET

#annotations #customization

#аннотации #настройка

Вопрос:

Я некоторое время бился головой об это, и я подумал, что у кого-то еще может возникнуть эта проблема в будущем. Я публикую свою полную проблему и решение для тех, кто придет позже, и предлагаю место для любых улучшений / упрощений, если кто-нибудь найдет его.

Проблема заключалась в том, что я пытался нарисовать вертикальные обозначения на моей диаграмме. Я не хочу привязывать его к каким-либо точкам данных, а просто привязывать его к оси X, на основе которой я отправляю диаграмму. В моем конструкторе аннотаций я пытался установить anchorX.

 double maxdate = chart.ChartAreas[0].AxisX.Maximum;
double mindate = chart.ChartAreas[0].AxisX.Minimum;

//use inputdata to find where relative spot is.
if(DateTime.TryParse(date, out ddate)) {
    AnchorX = (ddate.ToOADate()) / (maxdate - mindate);
}
  

Я продолжал возвращать значения mins и max как NaN, что, как я выяснил, означает, что ChartArea будет управлять собой и устанавливать свои собственные max / mins. Все это было предварительно нарисовано.

Я пробовал post painting, но затем каждый раз, когда он рисовался, он добавлял аннотацию, затем снова выполнял postpaint и бесконечный цикл.

Ответ №1:

Я наконец нашел событие, которое позволяет мне это сделать. Событие Customize() решило эту проблему.

 private void chart_Customize(object sender, EventArgs e) {
        PaintAnnotations();
    }
  

Теперь, непосредственно перед тем, как происходит рисование, данные, похоже, загружены, и к этому моменту уже установлены максимальные и минимальные значения, и я могу вернуть значения в коде сверху.

Надеюсь, это может спасти кому-то часы, которые я потерял!