Sender: TObject
Як використовувати параметр sender: tobject, який передається обробникам подій практично у всіх компонентах.
Я так розумію що він потрібен для того щоб визначити який компонент згенерував цю подію. (Якщо невірно - підправте)
У мене є кілька компонентів (обробники подій у них загальні).
Наприклад є кілька кнопок з одним обробником подій:
procedure TForm1.Button1Click (Sender: TObject);
begin
Як мені в цій процедурі дізнатися яка кнопка викликала даний обробник?
А взагалі мені потрібно присвоїти какой-нить змінної значення одного з проперти компонента який згенерував дана подія.
Просто я ніде не зміг знайти прикладів, де б це використовувалося, щоб подивитися.
Напишіть як це зробити.
procedure TForm1.Button1Click (Sender: TObject);
var btButton. Tbutton
begin
if Sender is Tbutton then
begin
btButton: = Tbutton (Sender);
if btButton = Button 1 then
.
else
if btButton = Button2 then
.
else
.
end
Можна і простіше, адже ти точно знаєш які будуть потрапляти в обробник?
if Sender = Button1 then.
2 Real
Я створюю компоненти в Рантайм, таким чином:
buttons: array [1..10] of tbutton;
.
чи можу я в такому випадку порівнювати так:
for i: = 1 to 10 do
begin
if sender = buttons [i] then. ;
end;
?
або можна все ж звернутися до властивостей компонента не використовуючи їх імена, а використовуючи лише sender, типу так.
var z: integer;
.
PS Я знаю що останній рядок неправильна і неработает, але просто хотів показати що малося на увазі.
> Buttons [i] .create (self);
дивно ти їх створюєш
> Чи можу я в такому випадку порівнювати так:
> For i: = 1 to 10 do
> begin
> If sender = buttons [i] then. ;
> End;
>.
можеш
> Z: = sender.tag;
1 z: = (Sender as TButton1) .Tag
2 z: = TButton (Sender) .Tag // при повній впевненості
Ну не пам'ятаю я точно як у мене написано. Тексту під руками немає.
До того ж я тільки на днях почав пробувати щось створювати в Рантайм, тому і міг помилитися не маючи тексту під руками.
Та й кнопки я для прикладу привіт, насправді це інший компонент, але суть від цього не змінюється Але щось типу того.
> 1 z: = (Sender as TButton1) .Tag
> 2 z: = TButton (Sender) .Tag // при повній впевненості
А щодо цього велике спасибі. Мене саме цей варіант і цікавив.
Тільки що означає "при повній впевненості". Тобто у чому?
в тому що Sender точно TButton
тобі вже написали між іншим вище
if Sender is TButton then ляля else мля.
ситуація буває така що обробник може бути повішений на подію у купи компонентів, більш того, компоненти можуть бути не тільки TButton
а для окремих випадків піде і це
if Sender = TButton then
І інші статті розділу почитайте - дуууже багато цікавого почерпнете.
PS: ще раз попрошу у всіх пробачення за один і той же текст і посилання раз в тиждень. Але буду продовжувати це робити, тому що вважаю правильним.