none
Punkte in Windows Forms Chart markieren RRS feed

  • Frage

  • Hallo,

    ich möchte in meinem Windows Forms Chart bestimmt Punkte markieren, z.B. einen Punkt mit den Koordinaten (50,500).

    Wie kann ich das machen?

    Grüße

    Matthias

    Montag, 3. August 2015 06:14

Antworten

  • Hallo Matthias,

    Sind die Koordinaten Client-Koordinaten auf der Form oder irgend etwas anderes?

    Für mich klingt es, deiner Frage nach, nach Client-Koordinaten. Ich kann es aktuell nicht testen, aber versuche mal das Paint-Event des Charts zu abonnieren und dann über e.Graphics... etwas zu zeichnen. Das Graphics-Objekt der gleichnamigen Eigenschaft bietet dir verschiedene Methoden zum Zeichnen von 2D Figuren an.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 3. August 2015 06:31
    Moderator
  • Hi Matthias,
    Du kannst den Stil jedes Punktes separat festlegen. Nachfolgend dazu ein Beispiel, wo zufällig Punkte mit Sternchen markiert werden.

    Imports System.Windows.Forms.DataVisualization.Charting
    
    Public Class Form9
    
      Private ch As New Chart With {.Text = "Chart", .Dock = DockStyle.Fill}
      Private ca As New ChartArea With {.Name = "Bereich"}
      Private l1 As New Legend With {.Name = "Legende"}
      Private s1 As New Series With {.ChartArea = "Bereich", .Legend = "Legende", .Name = "Serie", .ChartType = SeriesChartType.Line}
      Private rnd As New Random
    
      Private Sub Form9_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Width = 600
        Me.Controls.Add(ch)
        With ch
          .ChartAreas.Add(ca)
          .Legends.Add(l1)
          .Series.Add(s1)
          For Each wert In Testdaten.GetSerie
            Dim p = s1.Points.Add(wert.X, wert.Y1)
            If rnd.NextDouble > 0.69999999999999996 Then
              With p
                .MarkerSize = 20
                .MarkerStyle = MarkerStyle.Star5
              End With
            End If
          Next
        End With
      End Sub
    
      Public Class Testdaten
    
        Public Shared Function GetSerie() As IEnumerable(Of DatenObjekt)
          Return From e In GetData() Let n = e \ 45 Group By n Into Count() Select New DatenObjekt With {.X = n, .Y1 = Count}
        End Function
    
        Private Shared Function GetData() As List(Of Integer)
          Dim rnd As New Random
          Dim l As New List(Of Integer)
          For i = 1 To 1000
            l.Add(rnd.Next(0, 4096))
          Next
          Return l
        End Function
    
      End Class
    
      Public Class DatenObjekt
        Public Property X As Integer
        Public Property Y1 As Integer
    
      End Class
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 3. August 2015 07:18

Alle Antworten

  • Hallo Matthias,

    Sind die Koordinaten Client-Koordinaten auf der Form oder irgend etwas anderes?

    Für mich klingt es, deiner Frage nach, nach Client-Koordinaten. Ich kann es aktuell nicht testen, aber versuche mal das Paint-Event des Charts zu abonnieren und dann über e.Graphics... etwas zu zeichnen. Das Graphics-Objekt der gleichnamigen Eigenschaft bietet dir verschiedene Methoden zum Zeichnen von 2D Figuren an.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 3. August 2015 06:31
    Moderator
  • Hi Matthias,
    Du kannst den Stil jedes Punktes separat festlegen. Nachfolgend dazu ein Beispiel, wo zufällig Punkte mit Sternchen markiert werden.

    Imports System.Windows.Forms.DataVisualization.Charting
    
    Public Class Form9
    
      Private ch As New Chart With {.Text = "Chart", .Dock = DockStyle.Fill}
      Private ca As New ChartArea With {.Name = "Bereich"}
      Private l1 As New Legend With {.Name = "Legende"}
      Private s1 As New Series With {.ChartArea = "Bereich", .Legend = "Legende", .Name = "Serie", .ChartType = SeriesChartType.Line}
      Private rnd As New Random
    
      Private Sub Form9_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Width = 600
        Me.Controls.Add(ch)
        With ch
          .ChartAreas.Add(ca)
          .Legends.Add(l1)
          .Series.Add(s1)
          For Each wert In Testdaten.GetSerie
            Dim p = s1.Points.Add(wert.X, wert.Y1)
            If rnd.NextDouble > 0.69999999999999996 Then
              With p
                .MarkerSize = 20
                .MarkerStyle = MarkerStyle.Star5
              End With
            End If
          Next
        End With
      End Sub
    
      Public Class Testdaten
    
        Public Shared Function GetSerie() As IEnumerable(Of DatenObjekt)
          Return From e In GetData() Let n = e \ 45 Group By n Into Count() Select New DatenObjekt With {.X = n, .Y1 = Count}
        End Function
    
        Private Shared Function GetData() As List(Of Integer)
          Dim rnd As New Random
          Dim l As New List(Of Integer)
          For i = 1 To 1000
            l.Add(rnd.Next(0, 4096))
          Next
          Return l
        End Function
    
      End Class
    
      Public Class DatenObjekt
        Public Property X As Integer
        Public Property Y1 As Integer
    
      End Class
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 3. August 2015 07:18