Графические виджеты
Уроки Открыть IDE
На главную
Виджеты • Урок 13

Отправители (sender)

Как узнать, какой виджет вызвал обработчик

Проблема: одинаковые обработчики

Представьте, что у нас есть 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)