IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> как использовать Sender
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


полазил по FAQу - не нашел..
как я могу использовать Sender и где я могу его использовать???
если я правильно понимаю, то его можно использовать для одинаковых действий над объектами одного и того же класса.. это так??

вот напимер, как с помощью Sender мне в 3 checkbox - ах поменять свойство Visible???
пишу: (Sender as TCheckBox).Enabled:=true; - компиллирует но выдает ошибку...
подскажите пожалуйста..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


А ты где это пишешь? Sender as TCheckBox будет работать без ошибки только в обработчике событий TCheckBox (т. е., когда Sender is TCheckBox = True). Параметр Sender указывает объект-источник события. Например, в обработчике события TButton.OnClick параметр Sender будет указывать на объект типа TButton, сгенерировавший событие по щелчку мышкой.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


priboltik, приведи, пожалуйста, полностью обработчик события...
и поконкретнее, что в каком случае должно происходить...
при щелчке на CheckBox 3 CheckBox'а должны становиться невидимыми? Или только один, на который кликнули?
и описание ошибки, которая у тебя выдается.

hint: Enabled и Visible - это разные свойства ;)
хочешь менять видимость - с ней и работай.

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Цитата
hint: Enabled и Visible - это разные свойства ;)
хочешь менять видимость - с ней и работай.



сорри. погнал blink.gif мне нужен вообще в обработчик кнопки вставить... это реально???.. вот фрагмент кода:

procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text='' then
begin
if opendialog1.Execute then
begin
AssignFile(f,opendialog1.FileName);
reset(f);
Edit1.Text:=opendialog1.FileName;
(Sender as TCheckBox).Enabled:=true;
end;
end
else begin
try
Assignfile(f,edit1.text);
reset(f);
except
showMessage('Файл не найден');
edit1.Text:='';
end;
end;
end;




сегодня в универе посоветовали сначала сделать проверку: if (Sender is TCheckbox) then
(sender as TCheckbox).enabled;
.. еще правда не пробовал..

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Смотри: Sender - это то, что, собственно, вызвало событие.
В данном случае, насколько я вижу, это кнопка Button1.
НО! Если ты привешиваешь обработчик Button1Click на, например, событие CheckBox1 OnClick и щелкаешь по CheckBox1 - Sender'ом будет CheckBox1. Не все CheckBox'ы, а он один.
Тогда можно работать так, например:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TCheckBox then
begin
(Sender as TCheckBox).Visible:=false;
ShowMessage('Спрятали CheckBox');
end;
if Sender is TButton then
begin
(Sender as TButton).Visible:=false;
ShowMessage('Спрятали Button');
end;
end;

Но тут надо быть осторожным: если фактически Sender - BitBtn (TBitBtn - наследник TButton), то Sender is TButton вернет истину.

Если же тебе надо поменять видимость у всех CheckBox'ов, а не у одного, вызвавшего событие (или CheckBox'ы вообще не имеют отношения к событию) - работай с массивом Components, а не с Sender'ом


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


А вообще реально одной строкой поменять некот. свойства у объектов одного и того же класса????
если да, то как это сделать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TLabel) then
(Components[i] as TLabel).Caption := 'I''m Tlabel component !';
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


ок. спасибо.. собственно это и хотелось узнать.. good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.12.2021 3:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name