85 lines
3.4 KiB
VB.net
85 lines
3.4 KiB
VB.net
Imports System.Windows.Forms
|
|
|
|
Public Class frmError
|
|
Public ValidatorError As String = ""
|
|
Private _isClosing As Boolean = False
|
|
|
|
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
|
|
' ========== FIX 1: Event-Handler SOFORT deregistrieren ==========
|
|
RemoveHandler OK_Button.Click, AddressOf OK_Button_Click
|
|
|
|
' ========== DIAGNOSE: StackTrace ausgeben ==========
|
|
Dim st As New StackTrace(True)
|
|
LOGGER.Debug($"[frmError] OK_Button_Click aufgerufen von:")
|
|
For Each frame As StackFrame In st.GetFrames()
|
|
LOGGER.Debug($" {frame.GetMethod()?.DeclaringType?.Name}.{frame.GetMethod()?.Name} (Zeile {frame.GetFileLineNumber()})")
|
|
Next
|
|
' ========== ENDE DIAGNOSE ==========
|
|
|
|
CloseDialog()
|
|
End Sub
|
|
|
|
Private Sub frmError_Load(sender As Object, e As System.EventArgs) Handles Me.Load
|
|
If ValidatorError <> String.Empty Or errormessage <> String.Empty Then
|
|
If ValidatorError <> String.Empty Then
|
|
Me.txterror.Text = ValidatorError
|
|
Else
|
|
Me.txterror.Text = errormessage
|
|
End If
|
|
Me.Label1.Focus()
|
|
Me.Timer1.Start()
|
|
Else
|
|
Me.Close()
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
|
|
If Me.OK_Button.Focused Then
|
|
Me.Label1.Focus()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CloseDialog()
|
|
' ========== FIX 2: Guard mit Dispose-Check ==========
|
|
If _isClosing OrElse Me.IsDisposed Then
|
|
LOGGER.Debug($"[frmError] CloseDialog blockiert (isClosing={_isClosing}, IsDisposed={Me.IsDisposed})")
|
|
Exit Sub
|
|
End If
|
|
|
|
_isClosing = True
|
|
LOGGER.Debug($"[frmError] CloseDialog: Flag gesetzt, starte verzögerten Close")
|
|
|
|
' ========== FIX 3: VERZÖGERTER Close via BeginInvoke ==========
|
|
' KRITISCH: Close wird NACH Abschluss des aktuellen Event-Handlers ausgeführt
|
|
Me.BeginInvoke(New Action(Sub()
|
|
If Not Me.IsDisposed Then
|
|
Me.DialogResult = DialogResult.OK
|
|
Me.Close()
|
|
LOGGER.Debug($"[frmError] Dialog geschlossen via BeginInvoke")
|
|
End If
|
|
End Sub))
|
|
' ========== ENDE FIX 3 ==========
|
|
End Sub
|
|
Private Sub frmError_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
|
Me.Label1.Focus()
|
|
LOGGER.Debug($"[frmError] Dialog angezeigt - Enabled: {Me.Enabled}")
|
|
End Sub
|
|
|
|
Private Sub frmError_Activated(sender As Object, e As EventArgs) Handles Me.Activated
|
|
LOGGER.Debug($"[frmError] Dialog aktiviert")
|
|
End Sub
|
|
' ========== FIX 4: FormClosing-Handler hinzufügen ==========
|
|
Private Sub frmError_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
|
If _isClosing Then
|
|
LOGGER.Debug($"[frmError] FormClosing: Close bereits aktiv, erlauben")
|
|
Return
|
|
End If
|
|
|
|
' Falls Close von außen (z.B. [X]-Button) ausgelöst wurde
|
|
_isClosing = True
|
|
LOGGER.Debug($"[frmError] FormClosing: Flag gesetzt via FormClosing")
|
|
End Sub
|
|
' ========== ENDE FIX 4 ==========
|
|
End Class
|