#delphi
#delphi
Вопрос:
У меня есть форма, которая будет отображаться модально только со списком. Я хочу иметь возможность возвращать модальный результат mrOK при двойном щелчке элемента в списке или модальный результат mrCancel, когда пользователь нажимает escape.
Когда в форме нет кнопки для назначения модального ответа, как я могу эмулировать это?
Ответ №1:
На самом деле это очень просто: просто установите свойство формы ModalResult
:
Используйте ModalResult, чтобы закрыть форму, когда она отображается модально.
По умолчанию ModalResult равен mrNone . Установите для ModalResult любое ненулевое значение, чтобы закрыть форму. Значение, присвоенное ModalResult, становится возвращаемым значением вызова функции ShowModal, используемой для отображения формы.
В вашем случае,
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
if ListBox1.ItemIndex <> -1 then
ModalResult := mrOk;
end;
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_RETURN:
if ListBox1.ItemIndex <> -1 then
ModalResult := mrOk;
VK_ESCAPE:
ModalResult := mrCancel;
end;
end;
Комментарии:
1. Вероятно, вы захотите обрабатывать нажатия клавиш в
OnKey...
случае самой формы, а не в списке. Просто установитеKeyPreview
для свойства формы значение True.2. Поскольку OP написал «форму […] только с полем списка», я думаю, что чище использовать обработчик событий фактического элемента управления.