Assicurarsi che almeno 1 elemento in un menu TPOPUP sia sempre selezionato
-
12-12-2019 - |
Domanda
Ho il menu TPOPUP con 3 elementi Setup con le seguenti proprietà.
AutoCheck = True
RadioItem = True
.
E per la prima voce di menu ho impostato anche la proprietà Checked
su True
, quindi il menu ha almeno 1 elemento selezionato con esso è inizialmente visualizzato.Questo è tutto buono e bene, ma se clicco sull'articolo attualmente selezionato, il controllo (punto) va via e voglio renderlo in modo che almeno 1 elemento nel popup sia selezionato in ogni momento.Come faccio a farlo?
Soluzione
Gli elementi del gruppo dovrebbero anche avere lo stesso non-zero GroupIndex
. Questo, insieme a RadioItem
dovrebbe far funzionare gli articoli come una radio Gruppo.
Tuttavia, sembra che AutoCheck
non rispetta GroupIndex
e proprietà RadioItem
, poiché cancellerà il controllo quando si fa clic su una voce attualmente verificata.
(Probabilmente, questo potrebbe essere considerato un bug nel VCL.)
Ecco una soluzione alternativa:
Impostare AutoCheck
su False
, assegnare tutti gli elementi Lo stesso GroupIndex
TagCode GeneracoDICODICO e un gestore di OnClick
comune per verificare la voce cliccata come questa:
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
.
o usare Azioni , con loro questo sembra funzionare come previsto.
Altri suggerimenti
È possibile impostare il seguente gestore onClick in tutte le voci del menu Radio Group:
procedure TForm1.MenuItemClickHandler(Sender: TObject);
begin
if Sender is TMenuItem then
begin
if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked:=True;
end;
end;
.