![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работать с as и is ? [D7, XP]
Первокласник вася © (2006-10-08 13:53:00)Всем привет!
Я начинающий, и как правило опыта почти нет.
У меня такой вот вопрос: Как и для чего пользоваться asи is. Кучу книг пересмотрел, а на такую элементарную вещь лишь один пример и нифига не пойму назначение :(
Ребята подскажите пожалуйста!
Первокласник вася (2006-10-08 15:12:00) [21]да.... тут аффтора действительно отругали, но я не навязываюсь и стараюсь не ругаться с вами.
Господа прогарммеры, я дальше с вопросом.
Предположим, что компонент создан, его приведения в таком духе также возможно?
Iamdanil (2006-10-08 15:11:00) [22]У тебя сендер - кнопка поэтому код и не работает
Kolan (2006-10-08 15:10:00) [23]
> procedure TForm1.Button2Click(Sender: TObject);
> begin
> if Sender is TCheckBox then (Sender as TCheckBox).Checked:
> = true;
> end;
Ты проверил отладчиком условие выполняется?
procedure TForm1.Button2Click(Sender: TObject);
begin
if Sender is TCheckBox then
(Sender as TCheckBox).Checked:= true; // Точку сюда поставь...
end;
<Телепатирую>
Просто в ты в обработчике кнопкинаисал
if Sender is TCheckBox then (Sender as TCheckBox).Checked:= true;
Раз это обработчик нажатия на кнопкуто Sender всегда будет типаTButton, следовательно условиеSender is TCheckBoxбудет всегда ложно...
</Телепатирую>
Плохиш (2006-10-08 15:09:00) [24]
> Первокласник вася (08.10.06 15:05) [16]
> чета нич его не происходит
А что должно происходить?
> Первокласник вася (08.10.06 14:55) [14]
> а вы меня отругали
Ты про [10]? Так там тебя не оптругали. Вот здесь http://www.delphimaster.ru/cgi-bin/forum.pl?id=1160167184&n=18аФФтора отругали, хотя ты уже тоже приближаешься.
Первокласник вася (2006-10-08 15:08:00) [25]опа! все ясно кажется. Т.е. работать будет там, на что сослаться?
Iamdanil (2006-10-08 15:06:00) [26]Если ты поставишь этот код в checkbox1.onclick
То при щелчке по нему он сработает. Если ты вставишь этот код в щелчок кнопки не будет работать, потому что сендер это тот компонент событие которого обрабатывается.
Первокласник вася (2006-10-08 15:05:00) [27]Не понимаю..... чего то я.....
вот кусок
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TCheckBox then (Sender as TCheckBox).Checked:= false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Sender is TCheckBox then (Sender as TCheckBox).Checked:= true;
end;
чета нич его не происходит....
Virgo_Style (2006-10-08 15:02:00) [28]Первокласник вася (08.10.06 14:55) [14]
И все же, почему этот кусок кода не срабатывает?
срабатывает.
Первокласник вася (2006-10-08 14:55:00) [29]Ребят, я конечно приношу свои извенения, но учиться нужно не только писать код и думать головой, но и правильно "разговаривать", стараться нгайти что-то другое. вот и все... а вы меня отругали :(
И все же, почему этот кусок кода не срабатывает?
if Sender is TCheckBox then (sender as TCheckbox).Checked:= false;
Anatoly Podgoretsky (2006-10-08 14:24:00) [30]
> А чем хуже?
>
> if Sender is TButton then TButton(Sender).Enabled := False;
>
Не хуже и также безопасно, но вопрос был про AS и ответ поэтому тоже.
А вот если ты будешь делать это без IS тогда сразу почувствуешь разницу.
А такой подход тоже правомочен
(Sender as TButton).Enabled := False;
и
TButton(Sender).Enabled := False;
Второй код опасен
Ученик чародея (2006-10-08 14:18:00) [31]
> Anatoly Podgoretsky © (08.10.06 13:59) [2]
> Работать просто Object as/is TYPE then
> as безопасное приведение типа
> is проверка на тип, включая потомков
>
> Примеры
> if Sender is TButton then (Sender as TButton).Enabled :=
> False
> Проверяем, что Sender типа TButton и устанавливаем значения
> свойства
А чем хуже?
if Sender is TButton then TButton(Sender).Enabled := False;
Я всегда такое приведение типов использую.
Anatoly Podgoretsky (2006-10-08 14:13:00) [32]Первокласник вася (08.10.06 14:10) [8]
И что, хочешь рецензию на код - он правильный.
Anatoly Podgoretsky (2006-10-08 14:12:00) [33]Зачем ты нам это предлагаешь?
Это твоя домашняя задача.
Что значит да со множеством точек.
Ты сюда зачем пришел, за помощью? Так будь добр отвечать на уточняющие вопрос и четко формулировать свои мысли.
Kolan (2006-10-08 14:12:00) [34]
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> if Sender is TCheckBox then (sender as TCheckbox).Checked:
> = false;
> if Sender is TButton then (Sender as TButton).Enabled :
> = False
> end;
>
А ты этот обработчик навесил и на кнопку и на чекбокс?
А отладчиком пойтись?
Первокласник вася (2006-10-08 14:10:00) [35]Анатолий! Приветсвую Вас!
Что такое OnClick знают уже в школе :)
Мое вот так выглядит.
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TCheckBox then (sender as TCheckbox).Checked:= false;
if Sender is TButton then (Sender as TButton).Enabled := False
end;
Первокласник вася (2006-10-08 14:09:00) [36]да.....
Скопируй сначала вот этот код
if Sender is TCheckBox then (sender as TCheckbox).Checked:= false;
а потом скопируй вот это:
i f Sender is TButton then (Sender as TButton).Enabled := False
запусти прогу и нажми на кнопку и сравни рузельтат :)
Anatoly Podgoretsky (2006-10-08 14:07:00) [37]А нет ли у тебя обрабочика OnClick
Palladin (2006-10-08 14:06:00) [38]с чего ты взял что не работает, и что такое Sender?
Первокласник вася (2006-10-08 14:04:00) [39]Просто и понятно! Спасибо!
Только эксперимента ради я использовал Tcheckbox. Не работает.
if Sender is TCheckBox then (sender as TCheckbox).Checked:= true;
И ещё: если предположим на форме 10 TCheckbox то нужно так копать?
for t:=1 to ComponentCount-1 do
if Sender is TCheckBox then (sender as TCheckbox).Checked:= true;
Virgo_Style (2006-10-08 14:00:00) [40]if Sender is TButton ...
(Sender as TButton).Caption := ...