Проблема: одинаковые обработчики
Представьте, что у нас есть 5 кнопок, и мы хотим, чтобы каждая из них прятала все кнопки. Это легко сделать с помощью массива и одного обработчика:
Решение: параметр sender
А что, если мы хотим, чтобы кнопка прятала только себя? Или чтобы обработчик знал, какая именно кнопка была нажата?
Для этого в обработчик можно передать параметр sender — ссылку на виджет, который вызвал событие:
Параметр sender имеет тип того виджета, который вызывает событие. В данном случае — gui.Button. Через sender можно читать и изменять свойства вызвавшего виджета.
Sender для других виджетов
Параметр sender доступен не только для кнопок, но и для любых виджетов, поддерживающих события: LineEdit, SpinBox, Slider, CheckBox, ComboBox и других.
Пример: три поля ввода LineEdit с одинаковым обработчиком. При изменении текста в любом поле — лейбл показывает, какое именно поле было изменено:
Тип параметра sender должен соответствовать типу виджета, для которого пишется обработчик:
- Для кнопки:
void function(gui.Button sender) - Для поля ввода:
void function(gui.LineEdit sender) - Для слайдера:
void function(gui.Slider sender) - Для чекбокса:
void function(gui.CheckBox sender)