Події .NET - що таке відправник об’єкта та EventArgs e?


78

Що означають відправник і eventArgs? Як я можу ними скористатися (для сценарію нижче)?

Сценарій:

Я намагаюся створити власний елемент керування за допомогою функції видалення, і я хочу мати можливість видалити елемент керування, який було натиснуто на сторінці, що містить багато однакових елементів керування.


1
@rogerdeuce, ми зіткнулися з цією проблемою в проекті ASP.net c #, отже, вона позначена як c #. Я також додав тег vb на основі ваших коментарів щодо редагування.
stringo0

Відповіді:


86

Відправник - це елемент керування, для якого призначена дія (скажімо, OnClick, це кнопка).

EventArgs - це аргументи, які реалізатор цієї події може виявитися корисним. З OnClick він не містить нічого хорошого, але в деяких подіях, наприклад, скажімо в GridView 'SelectedIndexChanged', він міститиме новий індекс або деякі інші корисні дані.

Кріс каже, що ви можете зробити це:

protected void someButton_Click (object sender, EventArgs ea)
{
    Button someButton = sender as Button;
    if(someButton != null)
    {
        someButton.Text = "I was clicked!";
    }
}

4
Дякую! Чи не могли б ви розширити питання щодо eventargs або надати посилання на них? Наприклад, чи можу я передати значення рядка через eventargs? Якщо так, то як?
stringo0

5
Ну "ти" - це клас, що надсилає подію. Тож зазвичай ви підклас 'EventArgs' із власним 'MyControlsEventEventArgs', а потім встановлюєте властивості для того, що ви хочете передати. Отже, ви поміщаєте речі сюди лише тоді, коли пишете елемент керування, що надсилає подію. Якщо ви хочете ввести рядкове значення в кнопку, ви зазвичай використовуєте поле 'CommandArgument', до якого ви можете отримати доступ, відправивши відправника на 'Button' (як у моєму дописі).
Полудень Шовковий

21

senderпосилається на об'єкт, який викликав подію, яка запустила обробник подій. Це корисно, якщо у вас багато об’єктів, що використовують один і той же обробник подій.

EventArgsце щось на зразок фіктивного базового класу. Сам по собі він більш-менш марний, але якщо ви виходите з нього, ви можете додати будь-які дані, які вам потрібно передати вашим обробникам подій.

Коли ви реалізуєте власні події, використовуйте EventHandlerабо EventHandler<T>як їх тип. Це гарантує, що ви будете мати саме ці два параметри для всіх ваших подій (що добре).


8

Вручну прив’яжіть відправника до типу вашого користувацького елемента керування, а потім використовуйте його для видалення або вимкнення тощо. Наприклад, приблизно так:

private void myCustomControl_Click(object sender, EventArgs e)
{
  ((MyCustomControl)sender).DoWhatever();
}

"Відправник" - це лише об'єкт, з яким діяли (наприклад, натиснули).

Аргументи подій підкласуються для більш складних елементів керування, наприклад, перегляду дерева, щоб ви могли знати більше деталей про подію, наприклад, де саме вони клацнули.


Не могли б ви трохи розширити це? Як мені обробити відправника / eventargs? Я не звик ними користуватися.
stringo0

@ stringo0 sender - це об’єкт, який викликав подію (він викликає делегата події, передаючи 'this' за домовленістю). EventArgs, якщо не підкласувати, абсолютно не корисний . Отже, якщо у вас немає параметра SelectedIndexEventArgs або CancelEventArgs, ви нічого не можете зробити. Якщо ви не звикли їх використовувати, вам просто це не потрібно, але вони потрібні в підписі методу. Тож ви можете просто ігнорувати їх. Якщо ви пишете лямбду для обробки подій, вам навіть не потрібно писати імена цих аргументів
usr-local-ΕΨΗΕΛΩΝ

5
  1. 'відправник' називається об'єктом, який виконує певні дії на певному елементі управління

  2. `` подія '', яка має деяку інформацію про керування, яке має деяку поведінку та ідентичність, що виконуються якимось користувачем. коли дія буде генеруватися шляхом появи для додавання події, яку він зберігає в масиві, називається event agrs


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.