Есть форма в котором размещен кнопка, например Button1. Как сделать, чтобы при запуске формы это кнопка автоматически исполнилось один раз, а далее ручным кликом?
Обработайте событие формы Shown. В обработчике вызовите обработчик события кнопки.
Да, а лучше не вызывать само нажатие кнопки при запуске, а вынести общую часть (то что должно выполнится при запуске и то что должно выполнятся при нажатии этой кнопки) в отдельную процедуру, и выполнять это процедуру и при запуске, и при нажатии кнопки.
Даже если кнопка больше ничего не выполняет (сейчас) - практика показывает что так будет проще добавлять другие элементы программы, и легче будет не сделать некоторые ошибки.
И ещё, это простенький вопрос, обычно такое в Помощь новичкам пишут. А темы имеет смысл создавать только для сложных вопросов. Ну раз создали - уже не важно, это так, на будущее.
А мы не знаем, какие действия выполняет кнопка. Она может как-то модифицировать форму.
Какая разница. Я говорю про то что лучше делать так:
{$reference 'System.Windows.Forms.dll'}
uses System.Windows.Forms;
type
f1=class(Form)
b1:Button;
procedure Общее_для_кнопки_и_запуска_формы;
begin
//ToDo
end;
constructor;
begin
b1 := new Button;
b1.Click += (o,e)->
begin
Общее_для_кнопки_и_запуска_формы;
end;
self.Shown += (o,e)->
begin
Общее_для_кнопки_и_запуска_формы;
end;
end;
end;
begin end.
А вызов эвента нажатия кнопки вручную - это всегда костыль, даже если из эвента запуски формы.
А такие лямбды работают? В целом - так и правда лучше. Я примерно так и предлагал, только не думал, что там надо будет свой класс вводить.
Ну, именно так свой класс вводить не надо, просто таким образом кнопка - это поле формы, это как то логичнее.
А лямбда всегда может авто определить тип своих параметров, когда её присваивают эвенту. Я как узнал что можно o:System.Object, e:System.Windows.Forms.***************************EventArgs
не писать (где вместо ***
- какое то очень длинное название, которое я до этого просто копировал) - сразу стал только лямбдами это и не делать.
Но лямбды/не лямбды - это не касается того что я пытался донести. Из процедуры которую ставят на эвент - лучше вызывать отдельную процедуру. Чтоб из эвента Form.Shown
вызывать не обработчик эвента а нормальную процедуру. Потому что, как я и сказал:
Ну я и говорю - Ваш вариант лучше.