Hi,
ich habe mir ein Histogram gecodet, möchte das aber in einer .dll haben, damit alles compakter is.
Ich muss sonst immer den Code immer reinpacken, und das finde ich halt mühsam...
Könnt ihr mir da weiterhelfen?
Spoiler anzeigen
mfg
gfc
ich habe mir ein Histogram gecodet, möchte das aber in einer .dll haben, damit alles compakter is.
Ich muss sonst immer den Code immer reinpacken, und das finde ich halt mühsam...
Könnt ihr mir da weiterhelfen?
VB.NET-Quellcode
- Imports System.Drawing.Drawing2D
- Public Class Form1
- Dim H As Histogramm = New Histogramm
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- With H
- .Size = New Size(500, 500)
- For I As Integer = 0 To 20
- .Werte.Add(Int(Rnd() * 100))
- Next
- .Location = New Point(0, 0)
- End With
- Me.Controls.Add(H)
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- With H
- For I As Integer = 0 To 20
- H.Werte.Add(Int(Rnd() * 100))
- Next
- End With
- End Sub
- End Class
- Public Class Histogramm
- Inherits PictureBox
- Dim LineColor As Color = Color.Lime
- Dim StepX As Integer = 10
- Dim StepY As Integer = 10
- Dim GitterColor As Color = Color.DarkRed
- Dim BackgroundColor As Color = Color.Black
- Dim LastY As Integer
- Dim YMax As Integer = 0
- Dim RefreshTimer As Timer
- Public Werte As List(Of Integer)
- Sub New()
- Me.DoubleBuffered = True
- Me.RefreshTimer = New Timer
- Me.Werte = New List(Of Integer)
- Me.LastY = 0
- With Me.RefreshTimer
- .Interval = 1000
- .Enabled = True
- AddHandler .Tick, AddressOf NeuZeichnen
- End With
- End Sub
- Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
- 'MyBase.OnPaint(pe)
- With pe.Graphics
- .Clear(Me.BackgroundColor)
- For I As Integer = 0 To Me.Width Step StepX
- .DrawLine(New Pen(GitterColor), I, 0, I, Me.Height)
- Next
- For J As Integer = 0 To Me.Height Step StepY
- .DrawLine(New Pen(GitterColor), 0, J, Me.Width, J)
- Next
- Dim Y As Integer
- For Each Wert As Integer In Werte
- YMax = Math.Max(Math.Max(YMax, Wert), YMax)
- Next
- Dim X As Integer = 10
- Dim XOld As Integer = 0
- Dim YOld As Integer = LastY
- Form1.Text = Format(Me.Werte.Count)
- If Me.Werte.Count > 0 Then
- Select Case Me.Werte.Count
- Case 1
- Y = YOld
- .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
- XOld = X
- YOld = Y
- X = X + StepX
- Case Is >= 2
- YOld = CInt((Me.Height / YMax) * Werte(0))
- For W As Integer = 1 To Werte.Count - 1
- Y = CInt((Me.Height / YMax) * Werte(W))
- .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
- XOld = X
- YOld = Y
- X = X + StepX
- If X > Me.Width Then Exit For
- Next
- End Select
- LastY = Werte(Werte.Count - 1)
- End If
- If XOld < Me.Width Then
- .DrawLine(New Pen(LineColor), XOld, YOld, Me.Width, YOld)
- End If
- If Werte.Count > 0 Then
- Werte.RemoveAt(0)
- Else
- Me.YMax = 0
- End If
- End With
- End Sub
- Sub NeuZeichnen(ByVal sender As Object, ByVal e As EventArgs)
- Me.Refresh()
- End Sub
- End Class
mfg
gfc