* 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.
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:
- Focus Keyboard Mancante: Il
DataGridnon sempre aveva il focus keyboard dopo la selezione - Evento Consumato: Altri controlli potevano consumare l'evento
KeyDownprima che arrivasse al gestore
Soluzione Implementata
? 1. Cambiato da KeyDown a PreviewKeyDown
Perché?
PreviewKeyDownviene 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:
- ?
PreviewKeyDownlancia l'eventoRemoveUrlClicked - ?
RemoveUrlButton_Clickmostra UN SOLO messaggio di conferma - ? 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
- Avvia l'applicazione
- Aggiungi almeno 2 aste
- Seleziona un'asta nella griglia (clicca sulla riga)
- Premi il tasto Canc sulla tastiera
- ? Verifica che appaia UN SOLO messaggio di conferma
- Conferma la rimozione nel popup
- ? Verifica che l'asta sia stata rimossa dalla lista
Comportamento Atteso
? Scenario 1: Eliminazione Confermata
- Premi
Canc - Appare UN popup di conferma
- Clicchi
Sì - L'asta viene rimossa dalla griglia
- Nel log appare:
[REMOVE] Asta rimossa: ...
? Scenario 2: Eliminazione Annullata
- Premi
Canc - Appare UN popup di conferma
- Clicchi
No - L'asta rimane nella griglia
- Nel log appare:
[REMOVE] Rimozione annullata: ...
? Scenario 3: Nessuna Selezione
- Clicchi sul pulsante "Rimuovi" senza selezione
- Appare popup:
"Seleziona un'asta dalla griglia" - 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
-
?
Controls\AuctionMonitorControl.xaml- Cambiato
KeyDown?PreviewKeyDown - Aggiunto
Focusable="True"
- Cambiato
-
?
Controls\AuctionMonitorControl.xaml.cs- Rinominato
MultiAuctionsGrid_KeyDown?MultiAuctionsGrid_PreviewKeyDown - Rimosso messaggio di conferma duplicato
- Migliorato focus nel
SelectionChanged - Aggiunto debug logging
- Rinominato
-
?
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
Cancelimina 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