Pregunta

Tengo un menú emergente con 3 elementos configurados con las siguientes propiedades.

AutoCheck = True
RadioItem = True

y para el primer elemento del menú configuré el Checked propiedad a True Además, el menú tiene al menos 1 elemento seleccionado y se muestra inicialmente.Todo esto está muy bien, pero si hago clic en el elemento que está seleccionado actualmente, la marca (punto) desaparece y quiero que al menos 1 elemento en la ventana emergente esté seleccionado en todo momento.¿Cómo hago para hacer eso?

¿Fue útil?

Solución

Los elementos del grupo también deben tener el mismo valor distinto de cero. GroupIndex.Esto, junto con RadioItem debería hacer que los elementos se comporten como un grupo de radio.

Sin embargo, parece que AutoCheck no respeta GroupIndex y RadioItem properties, ya que borrará la marca cuando haga clic en un elemento actualmente marcado.(Podría decirse que esto podría considerarse un error en VCL).

Aquí hay una solución alternativa:

Colocar AutoCheck a False, asigna a todos los elementos el mismo valor distinto de cero GroupIndex y un común OnClick controlador para verificar el elemento en el que se hizo clic de esta manera:

procedure TForm1.ItemClick(Sender: TObject);
begin
  (Sender as TMenuItem).Checked := True;
end;

O usar Comportamiento, con ellos esto parece funcionar como se esperaba.

Otros consejos

Puede configurar el siguiente controlador OnClick para todos los elementos del menú de su grupo de radio:

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top