Histogramm

    • VB.NET
      Hi,

      ich habe für euch hier ein kleines Histogramm-Control mit beispiel im CMD-Style:

      VB.NET-Quellcode

      1. Imports System.Drawing.Drawing2D
      2. Public Class Form1
      3. Dim H As Histogramm = New Histogramm
      4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      5. With H
      6. .Size = New Size(500, 500)
      7. For I As Integer = 0 To 20
      8. .Werte.Add(Int(Rnd() * 100))
      9. Next
      10. .Location = New Point(0, 0)
      11. End With
      12. Me.Controls.Add(H)
      13. End Sub
      14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      15. With H
      16. For I As Integer = 0 To 20
      17. H.Werte.Add(Int(Rnd() * 100))
      18. Next
      19. End With
      20. End Sub
      21. End Class
      22. Public Class Histogramm
      23. Inherits PictureBox
      24. Dim LineColor As Color = Color.Lime
      25. Dim StepX As Integer = 10
      26. Dim StepY As Integer = 10
      27. Dim GitterColor As Color = Color.DarkRed
      28. Dim BackgroundColor As Color = Color.Black
      29. Dim LastY As Integer
      30. Dim YMax As Integer = 0
      31. Dim RefreshTimer As Timer
      32. Public Werte As List(Of Integer)
      33. Sub New()
      34. Me.DoubleBuffered = True
      35. Me.RefreshTimer = New Timer
      36. Me.Werte = New List(Of Integer)
      37. Me.LastY = 0
      38. With Me.RefreshTimer
      39. .Interval = 1000
      40. .Enabled = True
      41. AddHandler .Tick, AddressOf NeuZeichnen
      42. End With
      43. End Sub
      44. Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
      45. 'MyBase.OnPaint(pe)
      46. With pe.Graphics
      47. .Clear(Me.BackgroundColor)
      48. For I As Integer = 0 To Me.Width Step StepX
      49. .DrawLine(New Pen(GitterColor), I, 0, I, Me.Height)
      50. Next
      51. For J As Integer = 0 To Me.Height Step StepY
      52. .DrawLine(New Pen(GitterColor), 0, J, Me.Width, J)
      53. Next
      54. Dim Y As Integer
      55. For Each Wert As Integer In Werte
      56. YMax = Math.Max(Math.Max(YMax, Wert), YMax)
      57. Next
      58. Dim X As Integer = 10
      59. Dim XOld As Integer = 0
      60. Dim YOld As Integer = LastY
      61. Form1.Text = Format(Me.Werte.Count)
      62. If Me.Werte.Count > 0 Then
      63. Select Case Me.Werte.Count
      64. Case 1
      65. Y = YOld
      66. .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
      67. XOld = X
      68. YOld = Y
      69. X = X + StepX
      70. Case Is >= 2
      71. YOld = CInt((Me.Height / YMax) * Werte(0))
      72. For W As Integer = 1 To Werte.Count - 1
      73. Y = CInt((Me.Height / YMax) * Werte(W))
      74. .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
      75. XOld = X
      76. YOld = Y
      77. X = X + StepX
      78. If X > Me.Width Then Exit For
      79. Next
      80. End Select
      81. LastY = Werte(Werte.Count - 1)
      82. End If
      83. If XOld < Me.Width Then
      84. .DrawLine(New Pen(LineColor), XOld, YOld, Me.Width, YOld)
      85. End If
      86. If Werte.Count > 0 Then
      87. Werte.RemoveAt(0)
      88. Else
      89. Me.YMax = 0
      90. End If
      91. End With
      92. End Sub
      93. Sub NeuZeichnen(ByVal sender As Object, ByVal e As EventArgs)
      94. Me.Refresh()
      95. End Sub
      96. End Class


      mfg

      gfcwfzkm

      PS: Weis jemand, wie man daraus ein richtiges Control in .dll Form macht?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gfcwfzkm“ ()