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

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

Как правильно: Button1Click(Sender, nil или null)?


Страницы:   1 2

Mitroshin ©   (2010-12-26 11:40:00) 

Как правильнее Button1Click(nil) или Button1Click(null)?
В чём разница между nil и null ?


Leonid Troyanovsky   (2010-12-28 18:39:00) [1]


> PassLost   (28.12.10 18:33) [23]

> Вопрос-то был:

> > Как правильнее Button1Click(nil) или Button1Click(null)?


На провокационные вопросы не отвечаем.

--
Regards, LVT.


PassLost   (2010-12-28 18:33:00) [2]

> В "Начинающим" автор задал "глупый" вопрос.

Вопрос-то был:

> Как правильнее Button1Click(nil) или Button1Click(null)?
> В чём разница между nil и null?

:)


Германн   (2010-12-28 01:58:00) [3]


> В данном случае Германн не прав.

Не понимаю в чём я не прав в данномслучае.
В "Начинающим" автор задал "глупый" вопрос. Из чего я сделал вывод, что автор не знает о существовании метода Click у компонента TButton. И пытается без реального нажатия на кнопку выполнить некий код, который он поместил в обработчик события OnClick сего компонента.


> Но если смотреть на то, что procedure Button1Click(Sender:
>  TObject) - это всего лишь метод, который сегодня может
> быть привязан к кнопке Button1, завтра может быть привязан
> к динамически созданной панели, послезавтра - ещё к чему-
> то там, то правильнее будет вызывать именно этот метод.

А через полгода-год разработчик уйдет из фирмы, а на его место придет другой. Вот ему уже не позавидуешь!
:)


Leonid Troyanovsky   (2010-12-27 21:25:00) [4]


> Ega23 ©   (27.12.10 19:46) [20]

В данном случае надо звать TXControl.Click; override, дабы
потом не думать, на какую панель пошли потомки.

--
Regards, LVT.


Ega23   (2010-12-27 19:46:00) [5]


> А вот тут ты прав, что вызываешь регулярную процедуру, а
> не метод класса.


Ты вызываешь метод. Метод класса TForm1.


> Мысль не понятна. Чем же процедура в данном случае лучше
> метода


В данномслучае Германн не прав.
А в целом - между
procedure Foo;
и
procedure TFooClass.Foo
есть отличия.


_Юрий   (2010-12-27 19:36:00) [6]

Ничто не мешает создать published метод с сигнатурой TNotifyEvent, но с говорящим названием, и присвоить его кнопке в качестве обработчика точно также через инспектор объектов. Тогда этот метод можно вызывать и директивно, не опасаясь путаницы.


> А вот тут ты прав, что вызываешь регулярную процедуру, а
> не метод класса.
>


Мысль не понятна. Чем же процедура в данном случае лучше метода
?


Дмитрий Белькевич   (2010-12-27 11:41:00) [7]

А еще правильнее - сделать из того, что в Button1Click отдельный метод и вызывать его и в Button1Click и из других мест.


Ega23   (2010-12-27 09:36:00) [8]


> Почему?
> Не вижу навскидку ни одной причины, по которой нужно было
> бы явно "ручками"  вызывать пользовательский обработчик
> события нажатия кнопки вместо вызова метода кнопки Click.
>  Сей метод вроде как и придуман был для "программного нажатия"
> кнопки.
>


Ну скажем так. Если именно формальное нажатие конкретной кнопки - то да, правильнее Button.Click
Но если смотреть на то, что procedure Button1Click(Sender: TObject) - это всего лишь метод, который сегодня может быть привязан к кнопке Button1, завтра может быть привязан к динамически созданной панели, послезавтра - ещё к чему-то там, то правильнее будет вызывать именно этот метод.


Германн   (2010-12-27 02:57:00) [9]


> KilkennyCat ©   (27.12.10 02:36) [15]
>
> тогда я соглашусь с [4]. Хотя сам я вызываю процедуру так,
>  как она есть, а не искусственным созданием события, порождающего
> вызов обработчика. Так я твердо уверен, что вызовется только
> это. А в случае [4] я начну размышлять, а не будет ли при
> этом сгенерированы апдауновские, проверять, читать справку.
> .. слишком сложно :)

А вот тут ты прав, что вызываешь регулярную процедуру, а не метод класса.
Но дальнейший спор не имеет смысла, ибо автор молчит.
И Ёжка тоже молчит. (Но у него есть объективные причины спать. Ведь ему с утра на работу 3,5 часа!). Я Олегу, сочувствую. И отчасти понимаю.


KilkennyCat   (2010-12-27 02:36:00) [10]

тогда я соглашусь с [4]. Хотя сам я вызываю процедуру так, как она есть, а не искусственным созданием события, порождающего вызов обработчика. Так я твердо уверен, что вызовется только это. А в случае [4] я начну размышлять, а не будет ли при этом сгенерированы апдауновские, проверять, читать справку... слишком сложно :)


KilkennyCat   (2010-12-27 02:19:00) [11]

а-а-а.... понял мысль. я че-то наоборот, подумал о вызове из обработчика.


Германн   (2010-12-27 02:15:00) [12]


> ибо уже наверняка от темы ушло.

Даже если и так. Всё равно не вижу.
Пользовательский обработчик события предназначен для размещения дополнительного кода, который должен быть выполнен при физическом действии пользователя. В данном случае либо нажатие левой кнопки мыши на окне кнопки, либо нажатие кнопки Enter на клавиатуре (если кнопка дефолтная).


Плохиш   (2010-12-27 02:10:00) [13]

За отход от [4] я в 80% случаев руки отрываю.


KilkennyCat   (2010-12-27 01:56:00) [14]

наверное. я уже привык не обращать внимания на сабж, если постов более 4 :), ибо уже наверняка от темы ушло.


Германн   (2010-12-27 01:48:00) [15]


> KilkennyCat ©   (27.12.10 01:37) [9]
>
>
> > Не вижу навскидку ни одной причины
>
> передать Sender

Ну в рамках сабжа об этом говорить глупо. Согласись, Костя.


KilkennyCat   (2010-12-27 01:37:00) [16]


> Не вижу навскидку ни одной причины

передать Sender. Тогда легко модифицировать код, его перетащив из левой процедуры в обработчик. И не плодятся лишние переменные, флаги и пр.
Да и рука всегда на пульсе, всегда можно узнать вызвавшего, при той же отладке плюс.


Германн   (2010-12-27 01:31:00) [17]


> Ega23 ©   (26.12.10 15:09) [5]
>
>
> > Еще правильнее
>
>
> Не правильнее.
>

Почему?
Не вижу навскидку ни одной причины, по которой нужно было бы явно "ручками"  вызывать пользовательский обработчик события нажатия кнопки вместо вызова метода кнопки Click. Сей метод вроде как и придуман был для "программного нажатия" кнопки.


KilkennyCat   (2010-12-26 23:35:00) [18]


> clickmaker ©

вот ты точно знаешь ответ, у тебя ник соответствующий :)


clickmaker   (2010-12-26 17:19:00) [19]

> Как правильнее Button1Click(nil) или Button1Click(null)?

а что, компилятор не подсказывает?


Ega23   (2010-12-26 15:09:00) [20]


> Еще правильнее


Не правильнее.


Страницы:   1 2

Наверх

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