Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как работать с as и is ? [D7, XP]


Страницы:   1 2 3

Первокласник вася ©   (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 := ...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо