Dodaj bieżące zdarzenia w AddHandler)

Chcę pokazać kilka rzeczy w tym przykładzie ... ale głównym z nich jest dodawaniu zdarzeń do grupy kontrolnej w czasie wykonywania w Visual Basic. NET.

Na przykład musimy formularz z wielu formantów TextBox-tych (bez względu na ich nazwę). Możesz zrobić coś takiego, co zrobiłem.

Za każdym razem projektant Visual Studio dać kliknąć dwukrotnie formant jest utworzona podstrefa procedurę, która będzie odpowiedzialna za obsługę danej imprezy. W przypadku uchybienia ze pole tekstowe do zdarzenie TextChanged i wizualny projektant studio stworzy podprogram o nazwie TextBox1_TextChanged ale w rzeczywistości nazwa nie jest istotna, możemy ją zmienić i nic się nie stanie. Ważną rzeczą jest to, co jest na końcu linii: "Uchwyty TextBox1.TextChanged". Oznacza to, że rutyna "zarządzanie" w TextBox1.TextChanged wydarzenie.

Możemy przypisać te "obsługi" w czasie wykonywania i, jak w tym przykładzie, możemy to zrobić za pomocą tej samej funkcji dla wielu kontroli.

Składnia wprowadzić inny program obsługi jest:

 AddHandler Objeto.Evento, AddressOf MiRutina

i usunąć Handler:

 RemoveHandler Objeto.Evento, AddressOf MiRutina

Veramos teraz przykład w pytaniu: w tym przykładzie, co jest arem dodać dwa zdarzenia do każdego formantu TextBox, że mamy na formularzu. Te wydarzenia będą GotFocus (który pojawia się, gdy kontrola trwa ostrość) i LostFocus (który pojawia się, gdy kontrola traci fokus). Kiedy kontrola nie koncentruje się na zmianę koloru tła, w tym przypadku żółtego. A kiedy straci się powrócić do normalnego koloru.
Pierwszą rzeczą jest dodanie arem te dwie procedury.

 ConFoco Private Sub (ByVal sender As Object, E ByVal As System.EventArgs)
     DirectCast (nadawca, TextBox). BackColor = Color.Yellow
 End Sub

 SinFoco Private Sub (ByVal sender As Object, E ByVal As System.EventArgs)
     DirectCast (nadawca, TextBox). BackColor = Color.White
 End Sub

Zwykle mamy dwie procedury, ale nadal ... nikt nie nazywa ich. Do tego musimy dodać każdy formant TextBox w formularzu do zwołania Tes funkcje uchwytu.

W formie imprezy obciążenia dodać następujący kod:

 Dla każdego C jako obiekt w Me.Controls
     Jeśli c.GetType Czy GetType (TextBox) Następnie
         AddHandler DirectCast (c, TextBox). GotFocus, AddressOf conFoco
         AddHandler DirectCast (c, TextBox). LostFocus, AddressOf sinFoco
     End If
 Następny

I gotowe, możemy testować program i nie potrzebują niczego innego. Wszystko TextBox zmienić kolor tła wziąć ostrość. Nieważne ile są lub cokolwiek oni tzw.

na zdjęciu poniżej jest forma w pracy:

Myślę, że warto wyjaśnić się nieco ostatni kod.
Za każde działa na wszystkich

36 Responses to "Dodaj bieżące zdarzenia w AddHandler)"

  1. Bitacoras.com mówi:

    Informacje Bitacoras.com ...

    Kurs w Bitacoras.com: chcę pokazać kilka rzeczy z tego przykładu? ale głównym z nich jest dodawaniu zdarzeń do grupy kontrolnej w czasie wykonywania w Visual Basic. netto. Na przykład musimy formularz z wieloma kontroli ....

  2. Jose Antonio mówi:

    Dziękujemy! Kod czyste, proste i funkcjonalne. Jesteś fenomenem. Kiedyś tablice kontrolne w VB6 do tych rzeczy (jak pani ...), ale z tym mały trick jest elegancko rozwiązany.

  3. Eduardo Hernandez Saenz mówi:

    Dzięki za tego wspaniałego wkładu, wyrobiłem w VB6 przez 8 lat i nie znalazł sposób do zrobienia. Net, który uczynił w VB6 z zestaw kontrolek, takich jak pisanie pojedyncze wydarzenie dla wszystkich formularzu TexBox i zidentyfikować każdy co Index. Z twojego wsparcia gan pokonaliśmy tę trudność. DZIĘKI

  4. Fernando mówi:

    Witam, bardzo dobre wytłumaczenie. AddHandler Myślę, że ciekawe narzędzie, ale mam pytanie odnośnie tego produktu. Używam go w asp.net i działa świetnie, mogę dodać zdarzenia do dynamicznie łączy gatunek, ale tylko wtedy, gdy AddHandler jest w obciążeniu. Czy istnieje jakiś sposób, że działa nie będąc w obciążeniu?
    Dzięki za wszystko

  5. Jose mówi:

    bardzo dobry ten kod zapisuje wiele linii, i czasu.

  6. Jose mówi:

    Można zrobić coś podobnego, ale do sprawdzania naciśnięcia klawisza z tylko liczby, itd, ale jakoś identyfikacji każdy tekstowe wiedzieć, kto do zastosowania formatowania albo że musi być tylko liczby, tekst itp.. Mam nadzieję, że się twój punkt widzenia.

  7. Facundo mówi:

    Witam, chciałbym swoją stronę i podziwiaj swoje zaangażowanie w poście. Jestem obecnie studiuje na uniwersytecie i pomaga.

    Pozdrowienia!

  8. Shocksue mówi:

    Witaj dobry kod, ale mam ubiegania się o innej kontroli i inne ważne wydarzenie, a kiedy zdarza się, że gdy mówię:
    AddHandler miObjeto.evento, AddressOf miRutina
    mówi mi, że metoda "mirutina" ma ten sam podpis jako delegata.
    W przykładzie nie można wysłać mu parametry delegata i pracować dla Ciebie, które mogą być ze mną dzieje?
    Z góry dziękuję za pomoc ..

    • Elizeusz mówi:

      To prawda, mam wysłać parametry, ponieważ mają do wysłania czegokolwiek (są one wysyłane do kontroli, który wywołał zdarzenie), lecz musi być określony w zaproszeniu procedury. Na przykład: Private Sub MiRutina (ByVal sender As Object, E ByVal As System.EventArgs).

      Szczęście

  9. PreguntadorVB mówi:

    Cześć, to jest dobrym przykładem wykorzystania AddHandler i dodał kontroli do formularza.

    Dlatego chcę przyczynić się mój kawałek, dodając kod do dodawania zdarzeń do kontroli utworzonych przy starcie.

    Pozdrowienia.

    ----------------

    PulsadoDobleClick Private Sub (ByVal sender As Object, E ByVal As System.EventArgs)
    MsgBox ("Jesteś wciśnięty Kliknij dwukrotnie")
    End Sub

    Private Sub Form1_Load (ByVal sender Jak System.Object i ByVal e As System.EventArgs) Handles MyBase.Load
    Jak New TextBox MiCajaDeTexto Dim ()
    MiCajaDeTexto.Name = "CajaDeTexto"
    Me.Controls.Add (MiCajaDeTexto)
    Me.Controls AddHandler ust MiCajaDeTexto.Name). DoubleClick, AddressOf Me.PulsadoDobleClick
    End Sub

  10. Fernando mówi:

    Dzięki za pomoc, przywiozłem z dala od kłopotów. Pochodzę z VB6 i jest bardzo różna, czytałem gdzieś, że Microsoft zamierza objąć nowe tablice kontroli w ich nowych wersji VB.NET w ten sam sposób były one obsługiwane w VB6. To ułatwi życie dla tych z nas, starych VB6.

  11. Alejandro Contreras mówi:

    Świetne, po prostu dodać komentarz na temat możliwości przypisania funkcji, która ma parametry.

  12. Wilden mówi:

    Wielki rutyna, wielka pomoc dla tych, nadal migracji z VB6 do. Net, dzięki
    "** Użyj właściwość ReadOnly edytować pole tekstowe w danym GroupBox ** '

    Przykład w moim projekcie:

    Private Sub Form1_Load (ByVal sender Jak System.Object i ByVal e As System.EventArgs) Handles MyBase.Load

    "Znajdź pole tekstowe w GroupBox
    Dla każdego C jako Kontroli Me.grpDatosPasajero.Controls

    Jeśli c.GetType Czy GetType (TextBox) Następnie

    AddHandler DirectCast (c, TextBox). Enter AddressOf conFoco
    AddHandler DirectCast (c, TextBox). Zostaw, AddressOf sinFoco

    End If

    Następny

    End Sub

    "Procedury
    ConFoco Private Sub (ByVal sender As Object, E ByVal As System.EventArgs)

    Jeśli nie DirectCast (nadawca, TextBox). ReadOnly Następnie

    DirectCast (nadawca, TextBox). BackColor = Color.PaleGoldenrod
    End If

    End Sub

    SinFoco Private Sub (ByVal sender As Object, E ByVal As System.EventArgs)

    Jeśli nie DirectCast (nadawca, TextBox). ReadOnly Następnie
    DirectCast (nadawca, TextBox). BackColor = Color.White
    End If

    End Sub

    wav

  13. Czas Mik mówi:

    Exelentes kody przyjaciele jejej muszę przyznać. garacias w odpowiednim czasie. Pozdrowienia dla wszystkich

  14. Ale mówi:

    Podzielam ten kod do relize z pomocą swoich notatkach, to pomoże mi tworzyć wszystkie przyciski potrzebne i wysłać do funkcji z warunków związanych z wciśniętym przyciskiem, światło z jednego zdarzenia

    Public Class Form1
    Dim lbls () jako Buttona
    Private Sub Form1_Load (ByVal sender Jak System.Object i ByVal e As System.EventArgs) Handles MyBase.Load
    Dim loc As Integer = 25
    Dla m As Integer = 0 To 4
    ReDim Preserve lbls (m)
    lbls (m) = new Button
    Z lbls (m)
    . Text = ("Przycisk" & m)
    Lokalizacja. = Nowy pkt (0, loc)
    . Rozmiar () = New System.Drawing.Size (75, 23)
    End With
    lbls (m). Name = m
    Me.Controls.Add (lbls (m))
    Me.Controls AddHandler ust lbls (m). Nazwisko). Kliknij, AddressOf Me.Click
    loc + = 25
    Następny
    End Sub

    Private Sub Kliknij (ByVal sender As Object, E ByVal As System.EventArgs)
    Dim j Jako = przycisk nadawcy
    MsgBox ("Po naciśnięciu przycisku" & j.Name)
    End Sub
    End Class

    Mam nadzieję i będzie niektórych

  15. Julio Lopez mówi:

    Chcę stworzyć TabPage iw ten datagridview przy starcie, a q także dodać te kontrole w czasie projektowania, jeśli ktoś wie jak to zrobić, doceniam twoją pomoc.

  16. Julio Lopez mówi:

    Chcę stworzyć TabPage iw ten datagridview w czasie wykonywania, a także dodać te kontrole na ekranie projektowania Visual Basic.NET, jeśli ktoś wie jak to zrobić, doceniam twoją pomoc.

  17. pepelepu mówi:

    Holas! wszyscy! co się dzieje jest to, że nieruchomość dać wszystkie tekstowe z:
    Dla każdego C jako obiekt w Me.Controls
    ale jeśli kiero dać wyjątki niektórych kontroli jak ja ... na przykład za pomocą jednego przycisku kiero wypełnić mój formularz z kilkoma txtbox notatki dla studentów, ale istnieją inne txtbox takie jak kod, wymienić uwagi po uśrednieniu kiero utlizo
    Dim Sum (n) As Double
    Dim c Jak Kontroli
    Dla każdego C w Me.Controls
    Jeśli typeof c jest TextBox Następnie
    Sum (Val (c.Tag)) + = Val (c.Text)
    End If
    Następny
    Dla każdego C w Me.Controls
    Dim i As Integer
    Jeśli typeof c jest Label Następnie
    Jeśli c.Tag> = 0 Then
    Jeśli Val (c.Tag) = i wtedy
    c.Text = Sum (I) / Val (txtnn.Text)
    i + = 1
    End If
    End If
    End If
    ale wezmę wszystko i średni txtbox idzie źle

  18. mekano mówi:

    pepelepu, spróbuj exluir tak:

    ...
    Dla każdego C w Me.Controls
    wybierz c.Name przypadek
    "Kontroluje, aby wykluczyć
    case "nameControl1" "nameControl2" "nameControl3"
    pętla
    inny przypadek
    Ja steruje
    Sum (Val (c.Tag)) + = Val (c.Text)
    End Select
    następny

  19. Motta JR mówi:

    Pozdrawiam, bardzo ciekawy kod.

    Mam do Ciebie pytanie, mam opracowała MenuStrip który odczytuje elementy z bazy danych, a nie, że nie mogę nawet przypisać obsługi jest lub procedurę zdarzenia do każdego elementu MenuStrip kontrola lub pobieranie nazwy procedury DB dobrze, niektóre sugenrencia? Używam przykładowy plik, który można znaleźć w url Ławka rezerwowych: http://www.dotnethelp.co.uk/es/vb/108413/menu_strip_vbnet~~HEAD=dobj
    Dzięki za sugestie

  20. Daniel mówi:

    Miałem zamiar szalony nie jest w stanie wystrzelić wydarzenia aż między tutaj i przeczytaj

    "W postaci imprezy obciążenia dodać następujący kod:"

    Po prostu brakuje go, czasem gubię się w rzeczy oczywiste, dzięki xD

  21. Edgar mówi:

    Właśnie rozpoczęła się z wydarzeniami i treserzy i myślę, że jest złożona (dla mnie), ale dobrze jest mieć ludzi, którzy przyczyniają się swoją wiedzą z nas, którzy principiamos ... dziękuję Elizeusz i wszystkich, którzy włączone ich trochę.

    Pozdrowienia!

  22. Jezus mówi:

    Jestem nowy w tym i uważam to za interesujące i bardzo dobry dobry przykład, jak można wejść na giełdę i będą mogli dzwonić z dowolnej formie ... dzięki

  23. Romina mówi:

    usłyszeć pytanie jeśli nie mogę pomóc.
    Mam do zrobienia program do kontrolowania gry za pomocą klawiszy ruchu i chciałbym wiedzieć, jak przypisać klawisze do przycisków, które wprowadzane od góry do dołu, w lewo, w prawo i po naciśnięciu przycisku wciśnięty zrobić symulację.

  24. Cesar mówi:

    Szanowni Państwo, kwerenda, jak mogę przekazać parametry do funkcji, którą wskazano w addessOf, funkcja ma parametr (np. IDBOTON), a dla każdego przycisku, który tworzę patrzę w BD informacji IDBOTON.

    Dziękuję bardzo za pomoc.

  25. poncianux mówi:

    Nauczyłem się tego nie tak dawno temu (1 dzień) lol ale wydaje się skomplikowany, jest naprawdę proste, nawet nazwać zakres funkcji od A pozdrowienia SQLCE!

  26. Luis mówi:

    Witam, bardzo ciekawy, życzę mogli mi powiedzieć, jak zastosować ten kod do dodawania zdarzeń w czasie wykonywania w C #.
    Dzięki, też jest dodanie do klikania wydarzenie PictureBox stworzyłem przy starcie.
    Dzięki

  27. Javier mówi:

    Bardzo proste, ale bardzo praktyczne. Dziękuję bardzo

  28. Haider mówi:

    Witam, doskonała. Mam pytanie, ten kod działa na kontroli, które są bezpośrednio umieszczone na formularzu. Ale to działało do pojemników bez umieszczania w postaci load kod dla każdego kontenera?

    • Elizeusz mówi:

      Możesz stworzyć rekurencyjną funkcję, która sprawdza, czy kontrola jest wywoływana ponownie.
      Wtedy zostawiam wam przykład i chcę wyjaśnić, że nie testowałem z braku czasu, ale chciałam ci odpowiedzieć jak zostawię cię tutaj.
      Użyj go jako podstawy dla swojej funkcji. Powodzenia.

      Private Sub Form1_Load (ByVal sender As Object, E ByVal As System.EventArgs) Handles Me.Load
      recorrerContenedores (I)
      End Sub

      Sub recorrerContenedores (ByVal c Jako Control)
      Jeśli c.Controls.Count> 0 Then
      recorrerContenedores (c)
      Więcej
      'Dodaj uchwyty
      End If
      End Sub

  29. Heber mówi:

    Witaj Drogi, chciałem wiedzieć, czy tęsknię za część dokumentu, ponieważ w końcu, podczas gdy czytałem wydaje się, że będziemy wyjaśniać trochę kodu i jest mniej więcej tak:

    Myślę, że warto wyjaśnić się nieco ostatni kod.
    Za każde działa na wszystkich ...

    Czegoś brakuje? można go wypełnić, jeśli tak? Dziękujemy i gratulujemy za wkład można wnieść do wspólnoty VB

  30. Juan Carlos mówi:

    witam estubo buenaso że jednak mam problem, jeśli stwierdzisz, że twój projekt działa załadować formularz .... dobrze mój problem jest nie chcę więc kiero że naciśnięcie mój przycisk Dodaj ostatnio zaczyna funkcjonować jako zagubionego, ale ostrość każdy tekstowe .. mi pomóc w tym sip porfa reponde prędzej dzięki ...
    saludosss ....

    • Elizeusz mówi:

      Niekoniecznie AddHandler musi być w obciążeniu ... możesz go umieścić w dowolnym miejscu. Poza tym można korzystać (jeśli wymagane) oświadczenie RemoveHandler dla stowarzyszenia kontroli zdarzeń.

  31. Mario mówi:

    Wooow! Ten przykład byłem ogromna pomoc, dziękuję, naprawdę. Ale oczywiście nie może ^ ^ Pozdrowienia!

Komentarz