2014-09-10 8 views
3

У меня есть групповой ящик, содержащий много флажков - только флажки.VB .Net Могу ли я управлять всеми событиями изнутри группового ящика эффективным способом?

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

Я знаю, что могу написать отдельное подразделение и позволить ему обрабатывать все события, но писать на это очень трудоемко.

с помощью Visual Studio 2012

+0

Я хотел бы это увидеть! в любом случае, как насчет создания метода, называемого * DoSomething() *, и для каждого события * SelectedIndexChanged *, просто вызывайте * DoSomething(); * ??? – jbutler483

+0

Я предполагаю, что это сработает, но это так же трудоемко, как и другой вариант :) – Ciacciu

+0

не забывайте, вы можете иметь представление дизайнера на половине экрана и половину кода экрана. Дважды щелкните по одному, вставив метод * DoSomething() * на другую половину. Это так же быстро, как мне кажется, я боюсь :( – jbutler483

ответ

1

Если ваше время заботы о написании и управление большим Handles положением, вы можете просто цикл по Controls инкассо GroupBox «s при строительстве Вашего UserControl/Form и провода до каждого события на каждый CheckBox, например, так:

Imports System.Linq 

Public Sub New() 
    InitializeComponent() 

    For Each chkBox As CheckBox In yourGroupBoxVariable.Controls.OfType(Of CheckBox)() 
     AddHandler chkBox.CheckStateChanged, AddressOf YourCheckStateChangedHandlerMethod 
    Next 
End Sub 

Private Sub YourCheckStateChangedHandlerMethod(ByVal sender As Object, ByVal e As EventArgs) 
    ' Your handler code for the checkboxes 
End Sub 

Это использует OfType Enumerable расширения LINQ, чтобы отфильтровывать все дочерние элементы управления в GroupBox такового ти pe CheckBox.

+0

Спасибо, хорошо сработал! – Ciacciu

+0

Я не знаю, почему кто-то проголосовал бы за этот ответ, но он очень полезен при обработке событий. Ответил –

1

Другая возможность состоит в том, чтобы создать пользовательский GroupBox, т.е. производный от GroupBox и выставляя событие себя:

Public Class CheckboxGroup 
    Inherits GroupBox 

    Public Event CheckboxChanged(source As CheckBox, e As EventArgs) 

    Protected Overrides Sub OnControlAdded(e As ControlEventArgs) 
    ' this method is called everytime a checkbox is added 
    If TypeOf e.Control Is CheckBox Then 
     Dim chk As CheckBox = DirectCast(e.Control, CheckBox) 
     AddHandler chk.CheckedChanged, AddressOf AllCheckedChange 
    End If 
    End Sub 

    Private Sub AllCheckedChange(source As Object, e As EventArgs) 
    If TypeOf source Is CheckBox Then 
     Dim chk As CheckBox = DirectCast(source, CheckBox) 
     RaiseEvent CheckboxChanged(chk, e) 
    End If 
    End Sub 

End Class 

Вы можете прикрепить к событию в Form вроде:

Private Sub CheckboxChanged(source As CheckBox, e As EventArgs) Handles gb.CheckboxChanged 
    MsgBox(source.Text & " to " & source.Checked) 
    End Sub 

Advantage : вы никогда не сможете пропустить добавление обработчика события в CheckBox, даже если он создан динамически.

+0

Очень интересно , спасибо! [Avanek] (http://stackoverflow.com/users/357625/avanek) ответ isbetter подходит для ситуации, в которой я нахожусь, но это действительно очень полезно! – Ciacciu

 Смежные вопросы

  • Нет связанных вопросов^_^