В моей форме есть 30 или более TCheckbox с TNumberBox перед ними. Каждый TCheckbox и TNumberBox связаны так, что имя CheckBox1 — это C1, а NumberBox — это C1E, Checkbox2 — это C2, а NumberBox2 — это C2E и так далее. Если отмечен C1, C1E будет включен. Я не хочу использовать разные события onclick для каждого Tcheckbox. Я просто хочу использовать одну процедуру для всех событий TCheckbox onclick. Как я могу это сделать ?
Одна процедура на все проверки как?
Ответы (2)
Вы можете назначить следующий обработчик OnClick
(или что-то подобное) каждому из флажков:
procedure TYourFormName.CheckBoxClick(Sender: TObject);
var
Assoc: TControl;
ChkName: string;
begin
ChkName := TCheckBox(Sender).Name; // e.g. 'C1', 'C2', ...
Assoc := TControl(FindComponent(ChkName + 'E')); // e.g. 'C1E', 'C2E', ...
if Assigned(Assoc) then
Assoc.Enabled := TCheckBox(Sender).Checked;
end;
person
Rudy Velthuis
schedule
25.10.2017
Не работает для меня. Assoc.enable или видимое несогласие существует.
- person Jo3; 25.10.2017
@Jo3 Думаю, Руди имел в виду
Assoc: TControl;
и Assoc := FindComponent('Name + 'E'') as TControl;
.
- person nil; 25.10.2017
Теперь все работает хорошо, спасибо Руди за помощь и @nil за информирование.
- person Jo3; 25.10.2017
@Remy: спасибо за редактирование. У меня не было Delphi, так что это по памяти.
- person Rudy Velthuis; 25.10.2017
Если вы создали эти флажки и числовые поля во время разработки, вы можете использовать живые привязки. Откройте LiveBindings Designer и найдите свои компоненты. Добавьте свойство visible в свои числовые поля (нажав тройную точку внизу члена). Затем соедините свойство IsChecked флажка со свойством Visible числового поля (щелкните и перетащите).
person
Sebastian Proske
schedule
25.10.2017
Я могу использовать живое связывание, но для компонентов более 30, и я не знаю, сколько их будет, потому что программа еще не готова.
- person Jo3; 25.10.2017
FindComponent
после приведенияSender
кTCheckBox
, получения имени и добавления'E'
. - person Rudy Velthuis   schedule 25.10.2017TDictionary<TCheckBox, TNumberBox>
для отслеживания пар? Или используйтеTComponent.Tag
флажка, чтобы сохранить указатель на числовое поле. - person nil   schedule 25.10.2017n
, и вы остановились на 30, потому что больше 30 точно никогда не понадобится? Являются ли элементы управления во время разработки правильным ответом? Это звучит как работа для списка. - person J...   schedule 25.10.2017TFrame
, на котором есть 1TCheckBox
и 1TNumberBox
, с событием onOnClick
по мере необходимости, а затем использовал 30 экземпляров этого фрейма в форме. - person Remy Lebeau   schedule 25.10.2017