Форум: "Начинающим";
Текущий архив: 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