using System; using System.Windows.Forms; namespace PolyTraderSharp.Ui { /// /// Sicherheitsabfrage vor dem Herunterfahren. Die Beenden-Schaltfläche ist erst nach Ablauf eines /// kurzen Timers klickbar (verhindert versehentliches Beenden, z.B. während auf eine API-Antwort /// gewartet wird); „Abbrechen" ist jederzeit möglich. Bei Bestätigung liefert der Dialog /// – das eigentliche geordnete Herunterfahren übernimmt der Aufrufer. /// public partial class ShutdownConfirmDialog : Form { private int _remaining; /// Sekunden, bis „Beenden" freigeschaltet wird (Standard 10). public ShutdownConfirmDialog(int delaySeconds = 10) { InitializeComponent(); _remaining = Math.Max(0, delaySeconds); UpdateCountdownUi(); } protected override void OnShown(EventArgs e) { base.OnShown(e); if (_remaining <= 0) { EnableConfirm(); return; } countdownTimer.Start(); } private void CountdownTimer_Tick(object? sender, EventArgs e) { _remaining--; if (_remaining <= 0) { countdownTimer.Stop(); EnableConfirm(); return; } UpdateCountdownUi(); } private void UpdateCountdownUi() { lblCountdown.Text = $"Beenden möglich in {_remaining} s …"; btnConfirm.Text = $"Beenden ({_remaining} s)"; } private void EnableConfirm() { btnConfirm.Enabled = true; btnConfirm.Text = "Jetzt beenden"; lblCountdown.Text = "PolyTrader kann jetzt beendet werden."; lblCountdown.ForeColor = System.Drawing.Color.ForestGreen; btnConfirm.Focus(); } } }