Frage zu Dieser Klasse (MySQL Laggt)

  • VB.NET
  • .NET 4.5

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von JoeyPlayzTV.

    Ich habe dich lediglich darauf hingewiesen das in dem genannten Link deine Frage schon beantwortet wird. Ich gehe davon aus das wenn du das fragst
    du dort nicht viel gelesen hast.

    Ich habe ja auch nicht gesagt das du da nur was kopiert ist sondern nur das man nicht nur nach kopierbaren Code suchen sollte
    sondern auch Lesen und verstehen was in den Links steht. War vielleicht unglücklich ausgedrückt.
    Grüße , xChRoNiKx

    JoeyPlayzTV schrieb:

    Ich habe lediglich gefragt, ob ich mit "Sub()" mehrere Parameter verwenden kann. Eine ganz einfache Antwort, währe JA oder NEIN.
    So einfach ists nicht, weil die Frage ergibt keinen Sinn.
    Evtl. machst du ein Codebeispiel, was illustriert, was du meinst.

    Oder vlt. muss die Antwort so lauten: Ja, im allgemeinen kann ein "Sub()" auch Parameter beinhalten.
    Aber im Kontext mit Async/Await nicht.
    Also vielleicht ist das die Antwort - wie gesagt - die Frage ist recht unverständlich gestellt.
    Habe es mal umgesetzt mit async aber es Kommt ein Fehler ThreadÜbergreifender Vorgang

    Hier mein Code

    VB.NET-Quellcode

    1. Private Sub logingui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.Text = "TrackBoard 4 - Anmelden"
    3. End Sub
    4. Private Async Sub login_button_Click(sender As Object, e As EventArgs) Handles login_button.Click
    5. Await Task.Run(Sub() loginmanager.Login(username_textbox.Text, password_textbox.Text))
    6. End Sub
    7. Private Sub LoginWrongPasswod() Handles loginmanager.WrongPasswordEvent
    8. MsgBox("Du hast ein Falsches Passwort eigegeben.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    9. End Sub
    10. Private Sub LoginLoginSuccess() Handles loginmanager.LoginSuccessEvent
    11. MsgBox("Du hast dich erfolgreich angemeldet.", MsgBoxStyle.Information, "TrackBoard 4 - Anmelden")
    12. #Hier kommt der Fehler
    13. Me.Close()
    14. End Sub
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Jo - ich hab dir ja gesagt: Threading macht Dinge kompliziert.
    Du empfängst da ein Event, gefeuert vom LogInManager, welcher Async ausgeführt wird.
    Folglich ist das Event im NebenThread, und aus einem NebenThread kann man nicht auf ein Control zugreifen - auch nicht, um es zu schliessen.

    Am einfachsten wäre, der logInManager würde ein Ergebnis zurückgeben - etwa true oder false.

    VB.NET-Quellcode

    1. Private Sub logingui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.Text = "TrackBoard 4 - Anmelden"
    3. End Sub
    4. Private Async Sub login_button_Click(sender As Object, e As EventArgs) Handles login_button.Click
    5. If Await Task.Run(Function() loginmanager.Login(username_textbox.Text, password_textbox.Text)) Then
    6. MsgBox("Du hast dich erfolgreich angemeldet.", MsgBoxStyle.Information, "TrackBoard 4 - Anmelden")
    7. Me.Close()
    8. Else
    9. MsgBox("Du hast ein Falsches Passwort eigegeben.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    10. End If
    11. End Sub

    Noch paar Tips: Verzichte auf unnütze Leerzeilen - die machen Code nur unleserlich.
    Und - ganz wichtig: Schmeiss den Deppen-Namespace raus - siehe Visual Studio - Empfohlene Einstellungen
    Ok vielen dank dann muss ich das wohl umschreiben das der Loginmanager eine Function ist und diese Retunt mir true wenn er erfolgreich eingeloggt wurde


    Vielen Dank EfinderDesRades es Funktioniert da hätte ich selber drauf kommen müssen mit der Funktion aber Darum lernt man ja

    Aber Was meinst du mit NamesSpace meinst du Das My wenn ja wie kann ich es ohne machen?

    Hier man Fertiger Code Für Euch

    Die Klasse

    VB.NET-Quellcode

    1. Imports MySql.Data
    2. Imports MySql.Data.MySqlClient
    3. Public Class LoginManager
    4. Private mysqlcon As New MySqlConnection
    5. Private _Mepassword As String = ""
    6. Private _Meuserid As String = ""
    7. Private _Meusername As String = ""
    8. Private _Medevperms As Integer = 0
    9. ''' <summary>
    10. ''' Dieses Event wird ausgelöst, wenn ein Falsches Passwort angegeben wurde.
    11. ''' </summary>
    12. Public Event WrongPasswordEvent()
    13. ''' <summary>
    14. ''' Dieses Event wird ausgelöst, wenn der Benutzer nicht existiert.
    15. ''' </summary>
    16. Public Event UnknownUserEvent()
    17. ''' <summary>
    18. ''' Dieses Event wird ausgelöst, wenn sich ein gesperrter Benutzer einloggt.
    19. ''' </summary>
    20. Public Event UserBannedEvent()
    21. Private Sub InizalizeConnection()
    22. mysqlcon.ConnectionString = "encrypet#'#")
    23. End Sub
    24. ''' <summary>
    25. ''' Diese Methode, meldet einen Benutzer an.
    26. ''' </summary>
    27. ''' <param name="_username">Der Benutzername des Benutzers.</param>
    28. ''' <param name="_password">Das Passwort des Benutzers.</param>
    29. '''
    30. Public Function Login(_username As String, _password As String) As Boolean
    31. InizalizeConnection()
    32. mysqlcon.Open()
    33. If UserExists(_username) Then
    34. mysqlcon.Close()
    35. mysqlcon.Open()
    36. If Not CheckIsBanned(_username) = 1 Then
    37. mysqlcon.Close()
    38. mysqlcon.Open()
    39. DownloadUserdata(_username)
    40. mysqlcon.Close()
    41. If _password = _Mepassword Then
    42. My.Settings.login_status = True
    43. My.Settings.user_name = _username
    44. My.Settings.user_id = _Meuserid
    45. My.Settings.dev_perms = _Medevperms
    46. My.Settings.Save()
    47. My.Settings.Reload()
    48. Return True
    49. Else
    50. RaiseEvent WrongPasswordEvent()
    51. End If
    52. Else
    53. RaiseEvent UserBannedEvent()
    54. mysqlcon.Close()
    55. End If
    56. Else
    57. RaiseEvent UnknownUserEvent()
    58. mysqlcon.Close()
    59. End If
    60. Return False
    61. End Function
    62. Private Sub DownloadUserdata(_username As String)
    63. Try
    64. Dim mysqlcmd As New MySqlCommand
    65. mysqlcmd = mysqlcon.CreateCommand
    66. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name=@username;"
    67. mysqlcmd.Parameters.AddWithValue("@username", _username)
    68. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    69. While mysqlreader.Read
    70. _Mepassword = mysqlreader("user_password")
    71. _Meuserid = mysqlreader("user_id")
    72. _Medevperms = mysqlreader("dev_perms")
    73. End While
    74. mysqlcmd.Dispose()
    75. mysqlreader.Close()
    76. Catch ex As Exception
    77. MsgBox("Es ist ein Fehler beim abrufen der Benutzerdaten
    78. aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    79. End Try
    80. End Sub
    81. Private Function CheckIsBanned(_username As String) As Integer
    82. Try
    83. Dim _isBanned As Integer = 0
    84. Dim mysqlcmd As New MySqlCommand
    85. mysqlcmd = mysqlcon.CreateCommand
    86. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name=@username;"
    87. mysqlcmd.Parameters.AddWithValue("@username", _username)
    88. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    89. While mysqlreader.Read()
    90. _isBanned = mysqlreader("acc_bannned")
    91. End While
    92. Return _isBanned
    93. mysqlcmd.Dispose()
    94. mysqlreader.Close()
    95. Catch ex As Exception
    96. MsgBox("Es ist ein Fehler beim Prüfen der Benutzerdaten
    97. aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    98. Return 0
    99. End Try
    100. End Function
    101. Private Function UserExists(_username As String) As Integer
    102. Try
    103. Dim mysqlcmd As New MySqlCommand
    104. mysqlcmd = mysqlcon.CreateCommand
    105. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name=@username;"
    106. mysqlcmd.Parameters.AddWithValue("@username", _username)
    107. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    108. Return mysqlreader.Read
    109. mysqlcmd.Dispose()
    110. mysqlreader.Close()
    111. Catch ex As Exception
    112. MsgBox("Es ist ein Fehler beim Prüfen des Benutzernamens
    113. aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    114. Return False
    115. End Try
    116. End Function
    117. End Class


    Und das ist in der Form

    VB.NET-Quellcode

    1. Public Class logingui
    2. Private WithEvents loginmanager As New LoginManager
    3. Private Sub logingui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.Text = "TrackBoard 4 - Anmelden"
    5. End Sub
    6. Private Async Sub login_button_Click(sender As Object, e As EventArgs) Handles login_button.Click
    7. If Await Task.Run(Function() loginmanager.Login(username_textbox.Text, password_textbox.Text)) Then
    8. MsgBox("Du hast dich erfolgreich angemeldet.", MsgBoxStyle.Information, "TrackBoard 4 - Anmelden")
    9. Me.Close()
    10. End If
    11. End Sub
    12. Private Sub LoginWrongPasswod() Handles loginmanager.WrongPasswordEvent
    13. MsgBox("Du hast ein Falsches Passwort eigegeben.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    14. End Sub
    15. Private Sub LoginUnknownUser() Handles loginmanager.UnknownUserEvent
    16. MsgBox("Dieser Benutzer, existiert nicht.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    17. End Sub
    18. Private Sub LoginUserBanned() Handles loginmanager.UserBannedEvent
    19. MsgBox("Dein Benutzerkonto, wurde vom Programmentwickler
    20. gesperrt. Dir ist die weitere Nutzung dieser Software Untersagt.",
    21. MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    22. End Sub
    23. End Class

    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

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

    JoeyPlayzTV schrieb:

    Aber Was meinst du mit NamesSpace meinst du Das My wenn ja wie kann ich es ohne machen?
    Nein, aber ich gab dir doch einen Link - da ist alles dazu und noch mehr haarklein erklärt.
    vb.net wird mit einer verheerenden Grundeinstellung ausgeliefert, in der es eiglich kaum als objektorientierte Sprache aufgefasst werden kann.
    Und es erfordert leider einige Kenntnisse bzw. Anleitung bezüglich Optionen und Projekteinstellungen, um diese Grundeinstellungen dahingehend zu korrigieren, dass eine etwa c# ebenbürtige OOP-Programmiersprache daraus wird.
    Aber lies das Tut - das ist v.a. deswegen geschrieben, weil es (nicht nur mir) zum Hals heraushängt, das immer wieder von neuem erläutern zu müssen. :)



    Hmm - von meim Tipp mit den unnützen Leerzeilen scheinst du ja nicht viel zu halten.
    Aber guck doch mal:

    VB.NET-Quellcode

    1. Public Class logingui
    2. Private WithEvents loginmanager As New LoginManager
    3. Private Sub logingui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.Text = "TrackBoard 4 - Anmelden"
    5. End Sub
    6. Private Async Sub login_button_Click(sender As Object, e As EventArgs) Handles login_button.Click
    7. If Await Task.Run(Function() loginmanager.Login(username_textbox.Text, password_textbox.Text)) Then
    8. MsgBox("Du hast dich erfolgreich angemeldet.", MsgBoxStyle.Information, "TrackBoard 4 - Anmelden")
    9. Me.Close()
    10. End If
    11. End Sub
    12. Private Sub LoginWrongPasswod() Handles loginmanager.WrongPasswordEvent
    13. MsgBox("Du hast ein Falsches Passwort eigegeben.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    14. End Sub
    15. Private Sub LoginUnknownUser() Handles loginmanager.UnknownUserEvent
    16. MsgBox("Dieser Benutzer, existiert nicht.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    17. End Sub
    18. Private Sub LoginUserBanned() Handles loginmanager.UserBannedEvent
    19. MsgBox("Dein Benutzerkonto, wurde vom Programmentwickler
    20. gesperrt. Dir ist die weitere Nutzung dieser Software Untersagt.",
    21. MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    22. End Sub
    23. End Class

    VB.NET-Quellcode

    1. Public Class logingui
    2. Private WithEvents loginmanager As New LoginManager
    3. Private Sub logingui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.Text = "TrackBoard 4 - Anmelden"
    5. End Sub
    6. Private Async Sub login_button_Click(sender As Object, e As EventArgs) Handles login_button.Click
    7. If Await Task.Run(Function() loginmanager.Login(username_textbox.Text, password_textbox.Text)) Then
    8. MsgBox("Du hast dich erfolgreich angemeldet.", MsgBoxStyle.Information, "TrackBoard 4 - Anmelden")
    9. Me.Close()
    10. End If
    11. End Sub
    12. Private Sub LoginWrongPasswod() Handles loginmanager.WrongPasswordEvent
    13. MsgBox("Du hast ein Falsches Passwort eigegeben.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    14. End Sub
    15. Private Sub LoginUnknownUser() Handles loginmanager.UnknownUserEvent
    16. MsgBox("Dieser Benutzer, existiert nicht.", MsgBoxStyle.Exclamation, "TrackBoard 4 - Anmelden")
    17. End Sub
    18. Private Sub LoginUserBanned() Handles loginmanager.UserBannedEvent
    19. MsgBox("Dein Benutzerkonto, wurde vom Programmentwickler
    20. gesperrt. Dir ist die weitere Nutzung dieser Software Untersagt.",
    21. MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    22. End Sub
    23. End Class
    Findest du nicht, dass im 2. Snippet viel schneller aufzufassen ist, wieviele und welche Methoden es sind?

    Bei deim LogINManager wird der Vorzug vlt. noch deutlicher - es wäre nämlich ein großer Vorteil für die Lesbarkeit, wenn zB. die Methode LogIn() auf einem Bildschirm passen täte, sodass man nicht scrollen muss, um allen deren Code zu sehen.



    Und nochn Tipp: Unnützes Zeug unbedingt entfernen!!
    Du hast ja immer noch die Events drin - die ja garnet funktionieren.
    Das kann man garnet aufzählen, was das alles für Nachteile hat, wenn man unnützen und sogar fehlerhaften Code bestehen lässt.
    Für mich ist immer das gravierendste, dass ich stundenlang vor solchen Zeilen sitze, versuche, zu verstehen, bis mir dämmert: Da gibts nichts zu verstehen - es ist einfach (von mir oder anderen) hinterlassener Code-Müll.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Die Events die Drinne sind die Funktionieren ja und die Brauche ich auch

    Kannst du mir EVTL nochmal helfen ich habe Eine Klasse in der Werden in einer Async Methode Buttons erstellt mit Daten aus einer DB Desshalb Async nun möchte ich das der Button zu meine Form in ein FlowLayoutPanel gesetzt wird wie Rufe ich die Mainform in meiner Klasse auf und tue den button in das panel setzen es kommt immer threadübergreifender forgang Der typ des Buttons wird über ein Event retunt er ist vom Typ Button nun sagst du bestimmt mach dir eine Funktion die ein Button returnt das Problem ist nur das in einer Schleife mehrere Button aus der DB ausgelesen werden die sollen alle nach einander ausgegeben werden. Kannst du mir da ein tipp geben oder mir dabei helfen.
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Hab ich doch schon gesagt: Sowas geht nicht.
    Du kannst keine Controls im Nebenthread erstellen, und dann an iwas einfügen, was im MainThread erstellt wurde.

    Du kannst nur im Nebenthread die dafür nötigen Daten herbeiholen.
    Die returnst du dann Await, und da kannste aus den Daten Controls basteln und integrieren - im MainThread.
    Wenn ich eine Function habe like this

    VB.NET-Quellcode

    1. Private Functio Create Button() as Button
    2. For each button as Staring in btnlist
    3. return button
    4. next
    5. End Function


    Returnt mir das denn jeden button oder nur einen
    ich weis dumme frage aber noch nicht ausprobiert oder wird die Funktion nur ein mal getriggert heisst es gibt mir nur 1 button zurück

    Oder muss ich mir ne liste Returnen lassen von der Function
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    natürlich wird dir nur der erste Button zurück gegeben da nach dem Return die funktion beendet wird.
    Hast du schon die ganzen Grundlagen drin ? Ich meine zu wissen das sowas recht weit am Anfang vor kommt oder täusche ich mich ?

    Und warum versuchst du den Code nicht einfach und dann siehst du doch was passiert ?
    Und ja am besten eine Liste mit all den Buttons zurück geben. Aber warum muss man im Nebenthread Buttons erstellen ?
    Normalerweise erstellt man all seine Controls im Designer. Und das Hinzufügen per Code in irgendwelchen Schleifen zeugt meist
    von Designfehlern (das soll KEIN ANGRIFF sein). Sag uns mal was du vorhast genau da kann man bestimmt andere Lösungen finden.
    Grüße , xChRoNiKx

    Gönnt euch mal das Programm hier *Programme nur im Showroom!*

    Das ist mein bisheriges Programm dann siehst du was ich vor habe oder hier ein Video von der alten Version
    Das Video hat ein Kumpel dazu gemacht der ist aber noch ein bissl jünger



    Ist aber noch die sehr Alte Version die geht noch mit XML die neue ist schon mit sqllite und dieses Button erstellen bzw laden passiert halt über ein Threadpool und über Invokes
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    JoeyPlayzTV schrieb:


    Das ist mein bisheriges Programm dann siehst du was ich vor habe oder hier ein Video von der alten Version
    Das Video hat ein Kumpel dazu gemacht der ist aber noch ein bissl jünger


    Offtopic, aber das wage ich zu bezweifeln. Im Video wird gesagt "heute zeige ich euch mein Programm". Also entwickelt dein Kumpel das Programm nun oder doch du?

    Es ist keine Schande wenn man jung und unerfahren sich im Forum hier anmeldet, war bei mir genauso der Fall :)
    Bin jetzt 19 mein Kumpel hat das Video geschnitten und so
    Ist schon älter das Video das dort gezeigte Programm ist der Vorgänger die jetzige Version ist besser deshalb habe ich mich hier angemeldet um noch ein bissl was über OOP und Threading dazu zu lernen bin eig Java Dev aber Java ist blöd
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Erstelle deine Buttons im Main Thread. Multithreading und Controls vertragen sich nicht so gut. Man kan zwar per Invoke/BeginInvoke arbeiten, aber das frisst wieder Zeit und blockiert die GUI wieder einen Moment...

    Aber das Erstellen eines neuen Burtons wird doch wohl kaum das Zeitintensive in deinem Programm sein, oder? In der Regel lade ich per Await/Ascny meine Daten und verarbeite sie. Am ende werden die Daten auf der GUI dargestellt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich mache es jetzt erstmal so sollte s probleme Geben mache ich es mit Invoke

    Hier mein Kompletter TrackButtonSystemDecompiler

    VB.NET-Quellcode

    1. Imports System.Data.SQLite
    2. Public Class TestDecompiler
    3. Public Event DecompieStartEvent()
    4. Public Event DecompileStopEvent()
    5. Public Event CreateButtonEvent(_button As Button)
    6. Public _buttonlist As New List(Of String)
    7. Public Sub ReadButtons()
    8. RaiseEvent DecompieStartEvent()
    9. Dim sqlcmd As New SQLite.SQLiteCommand
    10. sqlcmd = sqlcon.CreateCommand
    11. sqlcmd.CommandText = "SELECT * FROM tb4_system_compiler;"
    12. Dim sqlreader As SQLite.SQLiteDataReader = sqlcmd.ExecuteReader
    13. While sqlreader.Read
    14. _buttonlist.Add(sqlreader("button_id"))
    15. MakeButton(sqlreader("button_name"), sqlreader("button_id"), sqlreader("button_color"))
    16. End While
    17. sqlcmd.Dispose()
    18. sqlreader.Close()
    19. DecompileSound()
    20. End Sub
    21. Private Sub MakeButton(_buttontext As String, _buttonid As String, _buttoncolor As Integer)
    22. Dim trackbutton As New Button
    23. trackbutton.Name = _buttonid
    24. trackbutton.Text = _buttontext
    25. Select Case _buttoncolor
    26. Case 0
    27. trackbutton.BackColor = Color.Transparent
    28. Case 1
    29. trackbutton.BackColor = Color.Yellow
    30. Case 2
    31. trackbutton.BackColor = Color.Cyan
    32. Case 3
    33. trackbutton.BackColor = Color.Blue
    34. Case 4
    35. trackbutton.BackColor = Color.Green
    36. End Select
    37. RaiseEvent CreateButtonEvent(trackbutton)
    38. End Sub
    39. Private Sub DecompileSound()
    40. Dim decompiler_sound_path As String = AppDomain.CurrentDomain.BaseDirectory + "/decompiler/"
    41. Dim sqlcmd As New SQLite.SQLiteCommand
    42. sqlcmd = sqlcon.CreateCommand
    43. For Each _buttonid As String In _buttonlist
    44. sqlcmd.CommandText = "SELECT sound_file FROM tb4_system_compiler WHERE button_id=@buttonid;"
    45. sqlcmd.Parameters.AddWithValue("@buttonid", _buttonid)
    46. IO.File.WriteAllBytes(decompiler_sound_path + _buttonid + ".mp3", sqlcmd.ExecuteScalar)
    47. Next
    48. sqlcmd.Dispose()
    49. RaiseEvent DecompileStopEvent()
    50. End Sub
    51. End Class


    Der Code ist richtig Sig habe ihn gestern abend Entwickelt bin krass oder xD Ihr könnt mir auch gerne verbesserungs Vorschläge für den Code Geben
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

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

    Zeile 11: Warum selektierst du alle Werte, wenn du doch nur button_id, button_name und button_color haben willst?
    Zeile 42/48: Benutz Path.Combine