Как выставить и сгенерировать пользовательские события для пользовательского элемента управления winforms vb.net

Можно использовать Счетный. Метод SequenceEqual .

using System;
using System.Linq;
...
var a1 = new int[] { 1, 2, 3};
var a2 = new int[] { 1, 2, 3};
var a3 = new int[] { 1, 2, 4};
var x = a1.SequenceEqual(a2); // true
var y = a1.SequenceEqual(a3); // false

, Если Вы не можете использовать.NET 3.5 по некоторым причинам, Ваш метод в порядке.
Compiler\run-разовая среда оптимизирует Ваш цикл, таким образом, Вы не должны будете волноваться о производительности.

6
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

Чтобы использовать настраиваемые события для восходящей цепочки событий другого элемента управления, вы можете сделать следующее:

Public Custom Event AddRemoveAttendees As EventHandler
    AddHandler(ByVal value As EventHandler)
        AddHandler _theButton.Click, value
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler _theButton.Click, value
    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        ' no need to do anything in here since you will actually '
        ' not raise this event; it only acts as a "placeholder" for the '
        ' buttons click event '
    End RaiseEvent
End Event

В AddHandler и RemoveHandler вы просто распространяете вызов для присоединения или удаления данного обработчика событий к / из события Click элемента управления.

Чтобы немного расширить использование настраиваемых событий, вот еще один пример реализации настраиваемого события:

Dim _handlers As New List(Of EventHandler)
Public Custom Event AddRemoveAttendees As EventHandler

    AddHandler(ByVal value As EventHandler)
        _handlers.Add(value)
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        If _handlers.Contains(value) Then
            _handlers.Remove(value)
        End If
    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        For Each handler As EventHandler In _handlers
            Try
                handler.Invoke(sender, e)
            Catch ex As Exception
                Debug.WriteLine("Exception while invoking event handler: " & ex.ToString())
            End Try
        Next
    End RaiseEvent
End Event

] Теперь, как это выглядит выше, он не делает ничего, кроме обычного объявления события:

Public Event AddRemoveAttendees As EventHandler

Он предоставляет аналогичный механизм, позволяющий присоединять и удалять обработчики событий, а также вызывать событие. Пользовательское событие добавляет дополнительный уровень контроля; вы можете написать код, связанный с добавлением, удалением и возбуждением события, в котором вы можете обеспечить соблюдение правил и немного настроить то, что будет происходить. Например, вы можете ограничить количество обработчиков событий, прикрепленных к вашему событию. Для этого вы можете изменить раздел AddHandler из приведенного выше примера:

    AddHandler(ByVal value As EventHandler)
        If _handlers.Count < 8 Then
            _handlers.Add(value)
        End If
    End AddHandler

Если вам не нужен такой подробный контроль, я не вижу необходимости объявлять настраиваемые события.

8
ответ дан 8 December 2019 в 17:26
поделиться

Если вам нужно то же, что и в в другом сообщении, которое вы упомянули, вот эквивалент VB.NET:

Public Custom Event AddRemoveAttendees As EventHandler

    AddHandler(ByVal value As EventHandler)
        AddHandler SaveButton.Click, value
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler SaveButton.Click, value
    End RemoveHandler

End Event

Но я не думаю, что это хорошая идея, потому что параметром события sender будет кнопка , не ваш UserControl ...

Вместо этого вы можете подписаться на событие Button.Click и инициировать собственное событие (без явных средств доступа)

6
ответ дан 8 December 2019 в 17:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: