Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.27;
Скачать: CL | DM;

Вниз

Как правильно: Button1Click(Sender, nil или null)?   Найти похожие ветки 

 
Mitroshin   (2010-12-26 11:40) [0]

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


 
_Юрий   (2010-12-26 12:05) [1]

nil - это указатель "вникуда", pointer любого типа (в том числе TObject и потомки)
null - это Variant, у которого нет значения


 
Ega23 ©   (2010-12-26 12:24) [2]


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


Правильно - казать правильный Sender. Если он не нужен - то nil


 
Mitroshin   (2010-12-26 14:09) [3]

Спасибо!


 
Германн ©   (2010-12-26 15:02) [4]

Еще правильнее
Button1.Click;


 
Ega23 ©   (2010-12-26 15:09) [5]


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


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


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

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

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


 
KilkennyCat ©   (2010-12-26 23:35) [7]


> clickmaker ©

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


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


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

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


 
KilkennyCat ©   (2010-12-27 01:37) [9]


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

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


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


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

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


 
KilkennyCat ©   (2010-12-27 01:56) [11]

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


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

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


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


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

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


 
KilkennyCat ©   (2010-12-27 02:19) [14]

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


 
KilkennyCat ©   (2010-12-27 02:36) [15]

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


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


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

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


 
Ega23 ©   (2010-12-27 09:36) [17]


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


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


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

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


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

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


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


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


 
Ega23 ©   (2010-12-27 19:46) [20]


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


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


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


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


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


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

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

--
Regards, LVT.


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


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

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


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

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


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

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

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

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

:)


 
Leonid Troyanovsky ©   (2010-12-28 18:39) [24]


> PassLost   (28.12.10 18:33) [23]

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

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


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

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2011.03.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.009 c
2-1293463778
Mitroshin
2010-12-27 18:29
2011.03.27
Возможно ли использовать строку STFilter в TDBGridEh как Edit-ы?


2-1293459918
Дмитрий С
2010-12-27 17:25
2011.03.27
Отключить питание.


4-1246600171
БарЛог
2009-07-03 09:49
2011.03.27
Функция NetGetDCName библиотеки netapi32.dll


15-1292331262
sosed47
2010-12-14 15:54
2011.03.27
Ошибка пакета компонентов


15-1292362195
Юрий
2010-12-15 00:29
2011.03.27
С днем рождения ! 15 декабря 2010 среда