2015-03-25 5 views
0

Я сделал класс диаграммы. Я предоставляю нашему стороннему программному обеспечению возможность добавлять серии с помощью всплывающих подсказок. Но всплывающие подсказки не работают.Как я могу заставить DataPoint.Tooltip работать правильно?

Самое забавное, что всплывающая подсказка работает иногда в стороннем программном обеспечении. Когда я тестирую его в форме окна, он никогда не работает ...

Что я делаю неправильно?

Класс:

public class DollarChart : System.Windows.Forms.DataVisualization.Charting.Chart 

Инициализация:

public void Wrapper_Init() 
{ 
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1; 
System.Windows.Forms.DataVisualization.Charting.Series MySeries2; 
chartArea1 = this.ChartAreas["ChartArea1"]; 
MySeries2 = this.Series["Series1"]; 

chartArea1.Name = "Default"; 

chartArea1.AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount; 
chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.True; 

chartArea1.AxisY2.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount; 

// Invisible series in order to make room for primary Y-axis on chartarea. 
MySeries2.Points.Add(0); 
MySeries2.Points.Add(490); 
MySeries2.Color = System.Drawing.Color.FromName("Transparent"); 

this.Name = "chart1"; 
} 

Функция для вставки данных:

public void Wrapper_Populate(System.Single[] AvailDollars, int SeriesSplitter, int PlotHours) 
{ 
System.Double[] Dollars; 
Dollars = new System.Double[AvailDollars.Length]; 
AvailDollars.CopyTo(Dollars,0); 
System.Double[] buffer; 
buffer = new System.Double[SeriesSplitter]; 

System.Windows.Forms.DataVisualization.Charting.Series MySeries = new System.Windows.Forms.DataVisualization.Charting.Series(); 
MySeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn; 

Array.Copy(Dollars, 0, buffer, 0, SeriesSplitter); // Copies from the correct place in the array. 
int n = 0; 
foreach (double p in buffer) 
{ 
    System.Windows.Forms.DataVisualization.Charting.DataPoint Pointer = new System.Windows.Forms.DataVisualization.Charting.DataPoint(); 
    Pointer.YValues[0] = p; 
    Pointer.ToolTip = "Testing123"; 
    MySeries.Points.Add(Pointer); 
    if (n == (PlotHours-1)) { break; } 
    n++; 
} 

MySeries.Name = "Stacked_Dollars"; 
MySeries.YAxisType = System.Windows.Forms.DataVisualization.Charting.AxisType.Secondary; 
this.Series.Add(MySeries); 

Причиной для установки подсказки за точки данных, является то, что я буду отображать вычисленный общее для всех серий и значение для конкретной серии в каждом потоке данных. Причиной для создания массива является то, что я получаю значения, аккуратно упакованные в массив из 600 элементов, разделенный на разделы для каждой серии, кроме того, мне нужно преобразовать из System.Single в System.Double.

Я уверен, что вы спросите, почему я это делаю. Использовали стороннее программное обеспечение, которое использует что-то, называемое quickscript.net. Одной из недостатков этого стороннего программного обеспечения является диаграмма. Тем не менее, мы можем импортировать пользовательские элементы управления. Поэтому нам приходится преодолевать ограничения, создавая то, что они называют «Client controls» и «Script function library».

ответ

0

Я пробовал разные небольшие настройки, но ни один из них, похоже, не работает. Что, кажется, работает, делает hittest обходное решение, хотя мне это не очень нравится. Проблема заключается в том, что ключевые слова, которые вы можете использовать, такие как «#VAL» и «\ n», не работают, когда вы копируете всплывающую подсказку. Поэтому вам действительно нужно перевести их в обработчике событий.

Это a решение проблемы, но не решение. Поэтому я не буду принимать его, если никакие другие ответы не появятся в следующем месяце ..

this.GetToolTipText += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs>(this.Chart1_GetToolTipText); 

private void Chart1_GetToolTipText(object sender, System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs e) 
{ 
    // Check selected chart element and set tooltip text 
    if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint) 
    { 
    int i = e.HitTestResult.PointIndex; 
    DataPoint dp = e.HitTestResult.Series.Points[i]; 
    decimal YValue = System.Convert.ToDecimal(dp.YValues[0]); 
    YValue = System.Math.Round(YValue, 2); 
    e.Text = dp.ToolTip.Replace("\\n","\n").Replace("#VAL",YValue.ToString()); 
    } 
} 
Смежные вопросы