Files
Mimante/Mimante/Documentation/FIX_DELETE_KEY.md
T
Alberto Balbo f017ec0364 Aggiornamento alla versione 4.0.0
* Aggiunto `BooleanToOpacityConverter` per gestire opacità dinamica.
* Introdotto nuovo sistema di timing con `BidBeforeDeadlineMs`.
* Aggiunta opzione `CheckAuctionOpenBeforeBid` per maggiore sicurezza.
* Implementato polling adattivo (10ms-1000ms) e cooldown di 800ms.
* Migliorata gestione pulsanti globali con supporto `AUTO-START`/`AUTO-STOP`.
* Fix per il tasto `Canc` e focus automatico sul `DataGrid`.
* Fix per avvio singola asta senza necessità di "Avvia Tutti".
* Aggiornati formati CSV/JSON/XML con nuovi campi.
* Migliorata gestione cookie con endpoint unico `buy_bids.php`.
* Miglioramenti UI/UX: tooltip, formattazione prezzi, feedback visivo.
* Aggiornata documentazione e changelog per la versione 4.0.0.
2025-11-19 18:43:40 +01:00

5.8 KiB

?? Fix Eliminazione Asta con Tasto Canc

Problema Rilevato

Quando si selezionava un'asta nella griglia e si premeva il tasto Canc (Delete), l'asta NON veniva eliminata.

Causa del Problema

Il sistema aveva l'evento KeyDown implementato, ma presentava 2 problemi:

  1. Focus Keyboard Mancante: Il DataGrid non sempre aveva il focus keyboard dopo la selezione
  2. Evento Consumato: Altri controlli potevano consumare l'evento KeyDown prima che arrivasse al gestore

Soluzione Implementata

? 1. Cambiato da KeyDown a PreviewKeyDown

Perché?

  • PreviewKeyDown viene chiamato PRIMA di tutti gli altri gestori
  • Ha priorità più alta nella catena di eventi WPF
  • Previene che l'evento venga consumato da controlli figli
<!-- PRIMA -->
KeyDown="MultiAuctionsGrid_KeyDown"

<!-- DOPO -->
PreviewKeyDown="MultiAuctionsGrid_PreviewKeyDown"

? 2. Aggiunto Focusable="True" nel XAML

Assicura che il DataGrid possa ricevere il focus keyboard.

Focusable="True"
FocusVisualStyle="{x:Null}"

? 3. Migliorata Gestione del Focus

Nel SelectionChanged, ora il focus viene dato con priorità corretta:

grid.Dispatcher.BeginInvoke(new Action(() =>
{
    if (!grid.IsFocused)
    {
        grid.Focus();
    }
}), DispatcherPriority.Background);

? 4. Aggiunto Logging Debug

Per diagnostica futura:

System.Diagnostics.Debug.WriteLine("[DELETE KEY] Tasto Canc premuto su asta selezionata");
System.Diagnostics.Debug.WriteLine("[DELETE KEY] Lancio evento RemoveUrlClicked");

? 5. Fix Messaggio Duplicato (Aggiornamento)

Problema: Apparivano 2 messaggi di conferma quando si premeva Canc

  • Primo in PreviewKeyDown
  • Secondo in RemoveUrlButton_Click

Soluzione: Rimosso il messaggio da PreviewKeyDown, lasciando solo quello in RemoveUrlButton_Click

Ora quando premi Canc:

  1. ? PreviewKeyDown lancia l'evento RemoveUrlClicked
  2. ? RemoveUrlButton_Click mostra UN SOLO messaggio di conferma
  3. ? L'utente conferma o annulla una sola volta

? 6. Messaggio di Conferma Unico

Messaggio chiaro e descrittivo (mostrato una sola volta):

Rimuovere l'asta dal monitoraggio?

Nome Asta
(ID: 12345)

L'asta verrà eliminata dalla lista e non sarà più monitorata.

? 7. Logging Potenziato

[REMOVE] Rimozione annullata: Nome Asta
[REMOVE] Asta rimossa: Nome Asta (ID: 12345)
[ERROR] Errore rimozione asta: messaggio errore

Come Testare

  1. Avvia l'applicazione
  2. Aggiungi almeno 2 aste
  3. Seleziona un'asta nella griglia (clicca sulla riga)
  4. Premi il tasto Canc sulla tastiera
  5. ? Verifica che appaia UN SOLO messaggio di conferma
  6. Conferma la rimozione nel popup
  7. ? Verifica che l'asta sia stata rimossa dalla lista

Comportamento Atteso

? Scenario 1: Eliminazione Confermata

  1. Premi Canc
  2. Appare UN popup di conferma
  3. Clicchi
  4. L'asta viene rimossa dalla griglia
  5. Nel log appare: [REMOVE] Asta rimossa: ...

? Scenario 2: Eliminazione Annullata

  1. Premi Canc
  2. Appare UN popup di conferma
  3. Clicchi No
  4. L'asta rimane nella griglia
  5. Nel log appare: [REMOVE] Rimozione annullata: ...

? Scenario 3: Nessuna Selezione

  1. Clicchi sul pulsante "Rimuovi" senza selezione
  2. Appare popup: "Seleziona un'asta dalla griglia"
  3. Nessuna asta viene rimossa

Debug Output (Visual Studio)

Se apri Output ? Debug, vedrai:

[FOCUS] DataGrid ora ha il focus keyboard
[DELETE KEY] Tasto Canc premuto su asta selezionata
[DELETE KEY] Lancio evento RemoveUrlClicked

File Modificati

  1. ? Controls\AuctionMonitorControl.xaml

    • Cambiato KeyDown ? PreviewKeyDown
    • Aggiunto Focusable="True"
  2. ? Controls\AuctionMonitorControl.xaml.cs

    • Rinominato MultiAuctionsGrid_KeyDown ? MultiAuctionsGrid_PreviewKeyDown
    • Rimosso messaggio di conferma duplicato
    • Migliorato focus nel SelectionChanged
    • Aggiunto debug logging
  3. ? Core\MainWindow.ButtonHandlers.cs

    • Messaggio di conferma (UNICO punto di conferma)
    • Aggiunto logging dettagliato
    • Migliorata gestione errori

Note Tecniche

Perché PreviewKeyDown invece di KeyDown?

Bubbling vs Tunneling in WPF:

  • Preview* eventi = Tunneling (dall'alto verso il basso)
  • Eventi normali = Bubbling (dal basso verso l'alto)

Nel nostro caso, se un controllo figlio (es. cella del DataGrid) consuma l'evento KeyDown, il gestore del DataGrid non viene mai chiamato.

Con PreviewKeyDown, il gestore del DataGrid viene chiamato per primo, prima che qualsiasi controllo figlio possa consumare l'evento.

Perché Dispatcher.BeginInvoke?

Il focus va dato dopo che il rendering della selezione è completo. BeginInvoke con DispatcherPriority.Background assicura che il focus venga dato al momento giusto.

Perché Rimuovere il MessageBox dal PreviewKeyDown?

Il PreviewKeyDown è responsabile solo di catturare l'evento tastiera e lanciare l'evento RemoveUrlClicked.

La logica di conferma appartiene al gestore dell'azione (RemoveUrlButton_Click), che viene chiamato sia dal tasto Canc che dal pulsante "Rimuovi".

Questo garantisce:

  • ? DRY (Don't Repeat Yourself) - Conferma in un solo posto
  • ? Coerenza - Stesso comportamento da tastiera e pulsante
  • ? Manutenibilità - Un solo messaggio da modificare

? Test di Verifica

  • Il tasto Canc elimina l'asta selezionata
  • Appare UN SOLO messaggio di conferma
  • L'asta viene rimossa dalla lista
  • Il log mostra [REMOVE] Asta rimossa
  • Annullare l'operazione funziona correttamente
  • Il pulsante "Rimuovi" continua a funzionare normalmente
  • Stessa conferma da tastiera e da pulsante

Data Fix: 2025
Versione: 4.0+
Issue 1: Tasto Canc non eliminava aste ? ? RISOLTO
Issue 2: Doppio messaggio di conferma ? ? RISOLTO