Убедитесь, что хотя бы 1 элемент в меню TPopup всегда выбран.

StackOverflow https://stackoverflow.com//questions/11681420

  •  12-12-2019
  •  | 
  •  

Вопрос

У меня есть меню TPopup с настройкой трех элементов со следующими свойствами.

AutoCheck = True
RadioItem = True

и для первого пункта меню я установил Checked собственность True а также, чтобы в меню изначально был выбран хотя бы 1 элемент.Это все хорошо, но если я нажму на выбранный в данный момент элемент, флажок (точка) исчезнет, ​​и я хочу сделать так, чтобы хотя бы 1 элемент во всплывающем окне всегда был выбран.Как мне это сделать?

Это было полезно?

Решение

Элементы в группе также должны иметь одинаковые ненулевые значения. GroupIndex.Это вместе с RadioItem должен заставить элементы вести себя как радиогруппа.

Однако кажется, что AutoCheck не уважает GroupIndex и RadioItem свойства, так как при нажатии на отмеченный в данный момент элемент будет снята проверка.(Возможно, это можно считать ошибкой в ​​VCL.)

Вот обходной путь:

Набор AutoCheck к False, присвойте всем элементам одинаковое ненулевое значение GroupIndex и общий OnClick обработчик для проверки выбранного элемента следующим образом:

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

Или используйте Действия, с ними это, кажется, работает так, как ожидалось.

Другие советы

Вы можете установить следующий обработчик OnClick для всех ваших пунктов меню радиогруппы:

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;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top