Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.27;
Скачать: [xml.tar.bz2];

Вниз

Как правильно: 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.004 c
3-1255946557
Ulugbek
2009-10-19 14:02
2011.03.27
Помогите оптимизировать View .. Firebird 2


11-1232496242
Jon
2009-01-21 03:04
2011.03.27
FPC + KOL 2.88


2-1293384218
ProgRAMmer Dimonych
2010-12-26 20:23
2011.03.27
PaintBox как в MS Paint (только WinAPI)


6-1236003416
Alik
2009-03-02 17:16
2011.03.27
Где взять компоненту TNmudp


3-1255361880
Piter
2009-10-12 19:38
2011.03.27
Оптимизация Join а в Postgres





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский