Restart Application funkioniert nicht im Debugging

  • VB.NET

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

    Restart Application funkioniert nicht im Debugging

    Hallo Zusammen!

    Ich habe in der letzten Zeit eine kleine Pendelsimulation geschrieben. Nun bin ich in den letzten Zügen. Ich wollte einen Reset Button einbauen, der mein Programm auf 0 setzt. Dazu habe ich den Code

    VB.NET-Quellcode

    1. Application.Restart()


    verwendet. Das funkioniert zwar wunderbar in der .EXE Datei, nicht aber im VB Debugging. Kann mir jemand erklären wieso? Oder hat jemand eine Idee wie man ein Reset in diesem Fall besser lösen kann?


    Danke schonmal im Vorraus.

    LG Lukas
    Du hast genau 2 Variable, die Länge und den Anfangswinkel, wenn es hoch kommt noch eine Anfangsgeschwindigkeit.
    Setze alle auf ihre Startwerte und feddich.
    Oder hast Du ein so liederliches Programm geschrieben, dass Du nicht weißt, wo das steht oder wie man das in eine Initialize()-Prozedur schreibt?
    Kannst Du vielleicht mal Deinen Code posten?
    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!
    Moin!

    Mein Code ist doch schon relativ lang und wahrscheinlich auch nicht sonderlich ausgefuchst. Aber vielleicht könnt ihr mir ja einn Hinweis geben. Das wäre toll!
    Dies ist jetzt nicht der Gesamte Code (wegen der Übersichtlichkeit) sondern nur die 2D Darstellung des Pendels.
    LG


    VB.NET-Quellcode

    1. Public Class Form2
    2. Public alpha_z, alpha_y As Decimal
    3. Public zoom As Decimal
    4. Public i, j As Integer
    5. Public phi, phip, phi2p As Decimal
    6. Public phiwerte(100) As Decimal
    7. Public k As Integer
    8. 'starten des Timers
    9. Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    10. Timer1.Enabled = True
    11. i = i + 1
    12. ' Textfeld 1 beschriften
    13. Label2.Text = "Simulation läuft" '& CStr(i)
    14. phi = 1
    15. 'Form3.zoom = 50
    16. Me.zoom = 50
    17. Me.Show()
    18. 'Form2.Show()
    19. 'Form3.Show()
    20. End Sub
    21. Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    22. End Sub
    23. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    24. j = j + 1
    25. 'Label3.Text = CStr(j)
    26. phi2p = -9.81 / 1 * Math.Sin(phi) - 0.09 * phip
    27. phip = phip + phi2p * 0.1
    28. phi = phi + phip * 0.1
    29. Label7.Text = phi
    30. Me.Refresh()
    31. 'Form3.Refresh()
    32. If k < 100 Then
    33. phiwerte(k) = phi
    34. k = k + 1
    35. Else
    36. For ii = 0 To 99
    37. phiwerte(ii) = phiwerte(ii + 1)
    38. Next
    39. phiwerte(99) = phi 'der letzte Punkt wird nichtmehr gezeichnet. Dadurch kein Punkt zuviel
    40. End If
    41. End Sub
    42. Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
    43. ' Timer beenden
    44. Timer1.Enabled = False
    45. End Sub
    46. Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
    47. End Sub
    48. '_________________________________________________________________________________________________________________________
    49. Private Sub Diagram(ByVal sender As Object, ByVal e As _
    50. System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    51. Dim p As New Pen(Color.Black, 2)
    52. Dim Brush As New SolidBrush(Color.Red)
    53. e.Graphics.DrawRectangle(p, 700, 100, Me.Width - 750, Me.Height - 300)
    54. ' Diagramm
    55. For kk = 0 To Me.k - 1
    56. e.Graphics.DrawEllipse(p, CInt(700 + kk * (Me.Width - 757) / 100), _
    57. CInt(100 + (Me.Height - 300) / 2) - zoom * Me.phiwerte(kk), 10, 10)
    58. e.Graphics.FillEllipse(Brush, CInt(700 + kk * (Me.Width - 757) / 100), _
    59. CInt(100 + (Me.Height - 300) / 2) - zoom * Me.phiwerte(kk), 10, 10)
    60. Next
    61. 'Graphik buffering
    62. Me.SetStyle(ControlStyles.DoubleBuffer, True)
    63. Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    64. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    65. End Sub
    66. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    67. End Sub
    68. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    69. zoom = zoom / 2
    70. End Sub
    71. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    72. zoom = zoom * 2
    73. End Sub
    74. Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    75. 'max phi suchen
    76. Dim i As Integer
    77. Dim max As Decimal
    78. For i = 0 To 100
    79. If Math.Abs(Me.phiwerte(i)) > max Then
    80. max = Math.Abs(Me.phiwerte(i))
    81. End If
    82. Next
    83. zoom = (Me.Height - 310) / max / 2
    84. End Sub
    85. Private Sub frmTest_Paint(ByVal sender As Object, ByVal e As _
    86. System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    87. Dim p As New Pen(Color.White, 5)
    88. '2D Darstellung -------------------------------
    89. If Me.RadioButton2.Checked = True Then
    90. Dim x, y As Integer
    91. Dim q As New Pen(Color.Black, 2)
    92. Dim Brush As New SolidBrush(Color.Red)
    93. x = 450 + 200 * Math.Sin(Me.phi)
    94. y = 150 + 200 * Math.Cos(Me.phi)
    95. e.Graphics.DrawLine(q, 450, 150, x, y)
    96. e.Graphics.DrawEllipse(q, x - 10, y - 10, 20, 20)
    97. e.Graphics.FillEllipse(Brush, x - 10, y - 10, 20, 20)
    98. End If
    99. 'Graphik buffering
    100. Me.SetStyle(ControlStyles.DoubleBuffer, True)
    101. Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    102. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    103. End Sub
    Fang mal an und gib Deinem projekt Option Strict On, da wirst Du gezwungen, die richtigen Datentypen zu verwenden.
    Korrigiere alle Fehler und poste den Code dann noch mal.
    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!
    Done! :)

    Sorry, aber ich bin eeeeecht ganz am Anfang. Habe jetzt alles ausgebessert. Hier der saubere Code:


    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form2
    3. Public alpha_z, alpha_y As Decimal
    4. Public zoom As Decimal
    5. Public i, j As Integer
    6. Public phi, phip, phi2p As Decimal
    7. Public phiwerte(100) As Decimal
    8. Public k As Integer
    9. 'starten des Timers
    10. Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    11. Timer1.Enabled = True
    12. i = i + 1
    13. ' Textfeld 1 beschriften
    14. Label2.Text = "Simulation läuft" '& CStr(i)
    15. phi = 1
    16. 'Form3.zoom = 50
    17. Me.zoom = 50
    18. Me.Show()
    19. 'Form2.Show()
    20. 'Form3.Show()
    21. End Sub
    22. Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    23. End Sub
    24. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    25. j = j + 1
    26. 'Label3.Text = CStr(j)
    27. phi2p = CDec(-9.81 / 1 * Math.Sin(phi) - 0.09 * phip)
    28. phip = CDec(phip + phi2p * 0.1)
    29. phi = CDec(phi + phip * 0.1)
    30. Label7.Text = CStr(phi)
    31. Me.Refresh()
    32. 'Form3.Refresh()
    33. If k < 100 Then
    34. phiwerte(k) = phi
    35. k = k + 1
    36. Else
    37. For ii = 0 To 99
    38. phiwerte(ii) = phiwerte(ii + 1)
    39. Next
    40. phiwerte(99) = phi 'der letzte Punkt wird nichtmehr gezeichnet. Dadurch kein Punkt zuviel
    41. End If
    42. End Sub
    43. Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
    44. ' Timer beenden
    45. Timer1.Enabled = False
    46. End Sub
    47. Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
    48. End Sub
    49. '_________________________________________________________________________________________________________________________
    50. Private Sub Diagram(ByVal sender As Object, ByVal e As _
    51. System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    52. Dim p As New Pen(Color.Black, 2)
    53. Dim Brush As New SolidBrush(Color.Red)
    54. e.Graphics.DrawRectangle(p, 700, 100, Me.Width - 750, Me.Height - 300)
    55. ' Diagramm
    56. For kk = 0 To Me.k - 1
    57. e.Graphics.DrawEllipse(p, CInt(700 + kk * (Me.Width - 757) / 100), _
    58. CInt(100 + (Me.Height - 300) / 2) - zoom * Me.phiwerte(kk), 10, 10)
    59. e.Graphics.FillEllipse(Brush, CInt(700 + kk * (Me.Width - 757) / 100), _
    60. CInt(100 + (Me.Height - 300) / 2) - zoom * Me.phiwerte(kk), 10, 10)
    61. Next
    62. 'Graphik buffering
    63. Me.SetStyle(ControlStyles.DoubleBuffer, True)
    64. Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    65. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    66. End Sub
    Nimm alles Dezimal raus und ersetz es durch Double. :D
    Dann editiere beide Posts oben, markiere den Code UND den [VB]-Tag und klick auf den Expander-Tag [+] neben dem [VB]-Tag.
    Dann kann man es lesen.
    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!
    Und es wäre gut, wenn du statt CInt, CDec, etc. die Parse-Funktion der Datentypen nutzt, also für CInt Integer.Parse, für CDec Decimal.Parse, für CDbl Double.Parse usw. Außerdem musst du die Formen richtig Instanziieren. Also statt Form3.Show folgendes schreiben:

    VB.NET-Quellcode

    1. Dim frm As New Form3
    2. frm.Show


    Form3 ist nämlich eine Klasse, kein Objekt. Klassen sind die Baupläne von Objekten. Kannst du in einem Bauplan die Tür öffnen? Nein. Du musst das Haus erst bauen, oder wie die Programmierer sagen, instanziieren. Das geht mit New. RodFromGermany hatte dazu mal ein Tut gemacht, aber ich finde den Link gerade nicht...
    Mfg
    Vincent

    VincentTB schrieb:

    Und es wäre gut, wenn du
    erst mal lesen würdest, wo solch vorkommt, ausschließlich bei der Type-Konvertierung wegen Option Strict On.
    @Cirrfeld: Nur da, wo Du zur Darstellung Integer verwendest, musst Du diese Werte aus den Double-Werten berechnen, da genügt ein CInt().
    Ansonsten sollte keine solche Konvertierung vorkommen müssen.
    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!
    Je une question. Wieso ist das dann unter Böse Funktionen. Also sollte man zum Beispiel beim setzten der Value in einer Progressbar diese Funktionen benutzten?! Ist das jetzt VB6 oder nicht? Das ist eine ganz normale Frage, ich will auch lernen.
    Mfg
    Vincent

    VincentTB schrieb:

    Ist das jetzt VB6 oder nicht?
    Schmeiß den Micrisoft.VisualBasic-Verweis aus Deinem Projekt, dann sollten die "bösen Funktionen" nicht mehr vorhanden sein.
    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!