2009-07-03 17 views
5

Lütfen THIS ilanını okuyun. Bu yazıda anlatılanla aynı sorunu yaşıyorum ama ben C# yerine VB.net içinde yapmaya çalışıyorum.Bir vb.net için özel olayların nasıl ortaya çıkarılması ve yükseltilmesi Kullanıcı denetimi

Bunu yapmak için kesinlikle emindim, özel bir etkinlik kullanmalıyım. (. Ben özel etkinlikler hakkında bilgi edinmek için bir code conversion site kullanılır) Yani IDE içinde aşağıdaki yazarken: Aşağıdaki kod parçacığı genişler

EventHandler

gibi

Kamu Özel Etkinlik AddRemoveAttendees.

Public Custom Event AddRemoveAttendees As EventHandler 
    AddHandler(ByVal value As EventHandler) 

    End AddHandler 

    RemoveHandler(ByVal value As EventHandler) 

    End RemoveHandler 

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs) 

    End RaiseEvent 
End Event 

Ama bununla ne yapacağımı anlayamıyorum. Bugüne kadar özel olayları hiç duymamıştım.

İstediğim şeyin alt satırı, kullanıcı denetiminin kapsayıcısına kadar bir düğme balonunun tıklama olayına sahip olmaktır. Kendi etkinliğimi sarmalayabileceğimi biliyorum, ancak en azından bu yolda ilerlemeden önce özel olayları anlamak isterim. sadece takmak veya verilen etkinliği kaldırmak için çağrı yaymak RemoveHandlerAddHandler yılında

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 

ve:

Seth

cevap

7

başka kontrolün olayları fokurdayan için özel etkinlikleri kullanmak için, böyle yapabilirsiniz İşleyicinin denetimin Click olayından/konumundan. Yukarıda göründüğü

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 

düzenli olay bildirimi daha küçük başka yapar, Şimdi::

özel etkinlik kullanımı ile ilgili biraz genişletmek için burada özel bir olayın başka örnek uygulamasıdır

Public Event AddRemoveAttendees As EventHandler 

Olay işleyicilerinin eklenmesini ve kaldırılmasını ve olayın yükseltilmesini sağlayan benzer bir mekanizma sağlar. Özel olayın eklediği şey ekstra bir kontrol seviyesidir; Kuralları uygulayabileceğiniz ve birazcık ne olacağına karar verebileceğiniz etkinliğin eklenmesi, kaldırılması ve yükseltilmesi ile ilgili bazı kodlar yazabilirsiniz. Örneğin, etkinliğinize bağlı etkinlik işleyicilerinin sayısını sınırlamak isteyebilirsiniz. Yukarıdaki örnekten AddHandler bölümü değiştirebileceğini ulaşmak için:

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

ayrıntılı kontrolün bu tür bir ihtiyaç yoksa, ben özel olaylar beyan gerek görmüyorlar. Eğer Mentionned diğer görevde aynı şeyi istiyorsanız

5

, burada VB.NET eşdeğer:

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 

Ama bunun iyi bir fikir olduğunu sanmıyorum olayın sender parametresi çünkü Bunun yerine Button, değil UserControl ...

olacak, Button.Click olaya abone olabilir ve Cevabınız için (hiçbir açık erişimcilerle) size

+0

Teşekkür kendi olay yükseltmek ... Ben verdi bay bayrak cevaplamak onun derinliği için ilk mesaj ama cevabınızı savundu. Denetimi standart delegeler ve denetim içindeki olaylara sarmaya karar verdim, böylece kullanıcı denetimi, önerilerinize göre chilc denetiminden ziyade olayları yayınlayacaktır. Teşekkürler. Seth –

İlgili konular