Fehlermeldung "Syntax Fehler"

  • VBScript

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von programmer71.

    Fehlermeldung "Syntax Fehler"

    file-upload.net/download-7669583/Code.txt.html

    in Zeile 131 hab ich einen Syntax Fehler "Handles"


    Oder:

    Visual Basic-Quellcode

    1. Public Class Form1
    2. Dim aufgabe1 As System.Threading.Thread
    3. Dim i As Integer = 0
    4. Dim alter_wert As Integer = 0
    5. Dim abbrechen_ok As Boolean = False
    6. 'der problem löse Button
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. aufgabe1.Start()
    9. End Sub
    10. Private Sub probleme_loesen()
    11. Me.Controls.Add(Label3)
    12. Button1.Enabled = False
    13. Do Until i = 1000
    14. If (abbrechen_ok) Then
    15. Exit Do
    16. End If
    17. i = i + 1
    18. If i > 0 And i < 100 Then
    19. Label2.Text = "Alle Kriege und alle bewaffneten Konflikte beenden..."
    20. End If
    21. If i > 100 And i < 2002 Then
    22. Label2.Text = "Hungersnöte beseitigen..."
    23. End If
    24. If i > 200 * 2 And i > 300 Then
    25. Label2.Text = "Energieversorgung sichern..."
    26. End If
    27. If i > 300 And i < 400 Then
    28. Label2.Text = "Klimawandel (Globale Erwärmung) in den Griff bekommen..."
    29. End If
    30. If i > 400 And i < 500 Then
    31. Label2.Text = "Bevölkerungswachstum begrenzen..."
    32. End If
    33. If i > 500 And i < 600 Then
    34. Label2.Text = "Ausweg aus der Weltweiten Finanzkrise finden..."
    35. End If
    36. If i > 600 And i < 700 Then
    37. Label2.Text = "Armut bekämpfen..."
    38. End If
    39. If i > 700 And i < 800 Then
    40. Label2.Text = "Verbreitung von ansteckenden Krankheiten unterbinden..."
    41. End If
    42. If i > 800 And i < 900 Then
    43. Label2.Text = "Verbreitung von Nuklearwaffen verbieten..."
    44. End If
    45. If i > 900 And i < 1000 Then
    46. Label2.Text = "Windows Stabil machen..."
    47. End If
    48. ProgressBar1.Value = i
    49. If (i Mod 10 = 0) Then
    50. ProgressBar1.CreateGraphics().DrawString(CStr(i / 10) + " %", New Font("Trebuchet MS", 12,
    51. FontStyle.Bold), Brushes.Black, New PointF(CSng(ProgressBar1.Width / 2 - 10), CSng(ProgressBar1.Height / 2 - 9)))
    52. alter_wert = CInt(i / 10)
    53. Else
    54. ProgressBar1.CreateGraphics().DrawString(CStr(alter_wert) + " %", New Font("Trebuchet MS", 12,
    55. FontStyle.Bold), Brushes.Black, New PointF(CSng(ProgressBar1.Width / 2 - 10), CSng(ProgressBar1.Height / 2 - 9)))
    56. End If
    57. System.Threading.Thread.Sleep(30)
    58. ProgressBar1.Refresh()
    59. Loop
    60. If Not (abbrechen_ok) Then
    61. System.Threading.Thread.Sleep(30)
    62. ProgressBar1.CreateGraphics().DrawString(CStr(alter_wert) + " %", New Font("Trebuchet MS", 12, FontStyle.Bold),
    63. Brushes.Black, New PointF(CSng(ProgressBar1.Width / 2 - 10), CSng(ProgressBar1.Height / 2 - 9)))
    64. System.Threading.Thread.Sleep(2000)
    65. ende()
    66. End If
    67. End Sub
    68. Private Sub ende()
    69. Me.ProgressBar1.Visible = False
    70. Me.Button1.Visible = False
    71. Me.Label2.Visible = False
    72. Me.Label1.Visible = False
    73. Me.Label3.Visible = False
    74. Me.Controls.Add(label_ende)
    75. End Sub
    76. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    77. Control.CheckForIllegalCrossThreadCalls = False
    78. Me.Controls.Remove(label_ende)
    79. Me.Controls.Remove(Label3)
    80. Me.DoubleBuffered = True
    81. If Screen.AllScreens.Length > 0 Then
    82. Me.StartPosition = FormStartPosition.Manual
    83. Me.Location = Screen.AllScreens(1).WorkingArea.Location
    84. End If
    85. Me.Location = Me.PointToScreen(New Point(140, 120))
    86. aufgabe1 = New System.Threading.Thread(AddressOf probleme_loesen)
    87. End Sub
    88. 'der Beenden Button
    89. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    90. If (i < 1000) Then
    91. Dim ergebnis As MsgBoxResult = MsgBox("Wollen Sie wirklich die Rettung der Welt aufs Spiel setzen?",
    92. MsgBoxStyle.YesNo)
    93. If (ergebnis = MsgBoxResult.Yes) Then
    94. Me.Close()
    95. End If
    96. Else
    97. Me.Close()
    98. End If
    99. End Sub
    100. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    101. Handles MyBase.FormClosing
    102. If (i < 1000) Then
    103. MessageBox.Show("Es konnten noch nicht alle Probleme gelöst werden...")
    104. End If
    105. abbrechen_ok = True
    106. Do While aufgabe1.IsAlive
    107. ' warten bis beendet
    108. Application.DoEvents()
    109. Loop
    110. End Sub
    111. End Class


    Aber auch wenn ich es Starte , bekomme ich mehrere Fehlermeldunden bzw. wenn ich es Debugge ?(


    Ich bräuchte unbedingt Hilfe!


    EDIT : Beim Debuggen kommt in der Zeile 16 bei aufgabe1.Start "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kevindevin“ ()

    Das mit dem aufgabe.Start()
    Schreib einfach ein "New" vor das System.Threading.Thread
    Du solltest echt mal ein Grundlagenbuch lesen und verstehen, was diese Fehler sagen wollen.
    Das bedeutet hier einfach, dass du auf dieses Objekt zugreifst, obwohl du es nicht instanziert hast.
    "aufgabe1" ist vom Typ System.Threading.Thread. Dieser ist, im Vergleich zu Integer und Boolean, die du hier auch verwendest, kein Datentyp, sondern ein Referenztyp. Referenztypen muss man, bevor man sie verwenden kann, erstellen (Fachbegriff: Instanzieren). Dies geschieht durch das Schlüsselwort "new".
    In Zeile 4 habe ich jetzt vor dem System.Threading.Thread ein New gesetzt!
    Doch jetzt kommt bei aufgabe1 bei Zeile 4 Fehler bei der Überladungsauflösung, da keine zugreifbare "New" diese Anzahl von Argumenten akzeptiert.
    Und in Zeile 108 ist ein New vor dem System.Threading.Thread
    Das stimmt, aber offensichtlich wird dieser Code gar nicht oder erst nach dem Buttonclick ausgeführt. Du solltest das mal überprüfen.
    Außerdem habe ich gerade das

    Visual Basic-Quellcode

    1. Control.CheckForIllegalCrossThreadCalls = False

    in deinem Code gefunden. Ich muss dir dringend raten das zu entfernen und stattdessen richtig zu Invoken.
    Das hab ich gemacht dann kommt "Fehler bei der Überladungsauflösung, da keine zugreifbare "New" diese Anzahl von Argumenten akzeptiert."

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

    Jo. Du gibst halt das an, wo du den Thread startest. Ich denke hier wäre das das Sub dafür. ;)
    Probiere einfach mal ein wenig durch und versuche selbst draufzukommen. ;)
    Schau dir auch mal den Link an.
    Was du auch machen kannst ist den Thread in nem eigenen Sub starten und dann beim Button-Click auf dieses zugreifen.
    Dann ginge das hier auch im Argument für das "New".

    msdn.microsoft.com/de-de/library/bb979403.aspx

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

    Also wenn du es so machst, dann liegst du falsch. ;)

    Visual Basic-Quellcode

    1. Dim aufgabe1 As New System.Threading.Thread(AddressOf ThreadStarten)


    Beim Button1-Click-Event:

    Visual Basic-Quellcode

    1. AddHandler Button1.Click, AddressOf ThreadStarten()


    Und dann das Sub ThreadStarten:

    Visual Basic-Quellcode

    1. Public Sub ThreadStarten(ByVal sender As Object, ByVal e As System.EventArgs)
    2. 'Hier den Code zum Starten des Threads
    3. End Sub


    Aber der Schritt ist überflüssig. Ich finde es halt übersichtlicher.
    Drum ginge auch einfach:

    Dim aufgabe1 As New System.Threading.Thread(AddressOf Button1_Click)
    Habe jetzt Dim aufgabe1 As New System.Threading.Thread(AddressOf Button1_Click) eingefügt , doch kommt jetzt der Fehler:


    Quellcode

    1. Fehler bei der Überladungsauflösung, da keine zugreifbare "New" mit diesen Argumenten aufgerufen werden kann: "Public Sub New(start As System.Threading.ParameterizedThreadStart)": Die Signatur der Private Sub Button1_Click(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ParameterizedThreadStart(obj As Object)" nicht kompatibel. "Public Sub New(start As System.Threading.ThreadStart)": Die Signatur der Private Sub Button1_Click(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ThreadStart()" nicht kompatibel. C:\Users\Kevin\Documents\Visual Studio 2010\Projects\Alles Wird Gut.vb 4 9 WindowsApplication1
    Dieser Fehler kommt, da die Überladung mit beliebigem Delegaten nur parameterlose Methoden zulässt. Um Methoden mit Parametern aufzurufen musst du den Speziellen Delegaten ParameterizedThreadStart verwenden, und diesen auf deine Methode zeigen lassen.
    Allerdings bin ich davon überzeugt, dass du hier sowieso die falsche Methode versuchst aufrufst. Button_Click ist ein Eventhanlder und sollte somit auch nur von dem abonnierten Event aufgerufen werden.
    Dann überleg einfach, wie oft du das überhaupt benötigst.
    Notfalls einfach entfernen, wenn du nur einmal einen Thread deklarieren brauchst. Schau dir einfach mal alle Links an und probiere ein wenig rum! ;)
    Verstehst du den Code überhaupt? Woher hast du den?