Code zur .dll umwandeln - problem

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Code zur .dll umwandeln - problem

    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

    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

    gfc
    Und wo liegt jetzt das Problem?

    -> Neues Projekt > Klassenbibliothek?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Hallo,

    so einfach kannst du das nicht als dll verwenden.

    Einfachster Weg, du erstellst 2 Projekte (1 x WindowsForms, 1 x Klassenbibliothek).

    Aller Code der mit der Form zu tun hat bleibt in der Form und hat nicht in der dll zu suchen.

    Gruss

    mikeb69
    Zuerst musst Du Deine Klasse Histogramm von der Form1 entkoppeln.
    Pack die Klasse Histogramm dazu in einen separaten File.
    Du kannst das Control, in dem dargestellt werden soll, der New()-Prozedur als Parameter übergeben.
    Dieser kannst Du dann Deinen Paint-Handler adden.
    Lösche alle Verweise auf Form1 und bringe das zum Laufen.
    Überlege, ob Du das Neuzeichnen ggf. über einen Event steuern willst.
    Nun kannst Du daran gehen, Deine Klasse in eine DLL zu packen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!