Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #9
    Quote Originariamente inviata da alka Visualizza il messaggio
    Studia come implementare in generale il disegno all'interno dei controlli visuali, ad esempio partendo da questa documentazione, poi prova a disegnare nel controllo sfruttando gli eventi PrePaint e PostPaint del controllo Chart.

    Ciao!
    Alla fine ho risolto in un altro modo. In pratica prendo il controllo padre dentro al quale é contenuto il grafico tramite "chart1.Parent". A quel punto aggiungo il label all'interno del controllo padre e lo porto in primo piano (in modo da mettere il label sopra il grafico). A questo punto invece di ridisegnare il grafico, ridisegno il controllo padre, che é molto piú leggero da ridisegnare. In pratica il label non l'ho messo dentro al grafico ma sopra in modo da ridisegnare il controllo padre che é piú leggero.

    Qui il codice, magari puó tornare utile a qualcuno:

    Control controllo = chart1.Parent;


    if (controllo.Controls.Contains(label))
    {
    controllo.Controls.Remove(label);
    }



    HitTestResult result2 = chart1.HitTest(e.X, e.Y);




    if (result2.ChartElementType == ChartElementType.DataPoint)
    {
    var serie = result2.Series;
    double valore = 0;
    dynamic data;


    DataPoint dp = serie.Points[result2.PointIndex];


    if (serie.XValueType == ChartValueType.DateTime)
    {
    data = (DateTime.FromOADate(dp.XValue));
    }
    else
    {
    data = Math.Round(dp.XValue, 2);
    }


    if (chartarea.AxisY.IsLogarithmic == true)
    {
    valore = Math.Round(Math.Pow(10, chartarea.AxisY.PixelPositionToValue(e.Location.Y) ), 2);
    }
    else
    {
    valore = Math.Round(chartarea.AxisY.PixelPositionToValue(e. Location.Y), 2);
    }



    label.Text = "X: " + Convert.ToString(data) + "\n" + "Y: " + Convert.ToString(valore);




    var coordinate = new Point(e.X + 20, e.Y + 20);
    coordinate = chart1.PointToScreen(coordinate);
    coordinate = controllo.PointToClient(coordinate);


    label.Location = coordinate;

    controllo.Controls.Add(label);


    label.BringToFront();


    controllo.Invalidate(); //ridisegna il grafico
    controllo.Update();
    }
    Ultima modifica di Edoardo998; 16-05-2023 a 18:46

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.