Убедитесь, что хотя бы 1 элемент в меню TPopup всегда выбран.
-
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;
.