Toon posts:

[VB.NET 2005] event koppelen aan dynamische control

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag een event koppelen aan een control, die control wordt opgebouwd vanuit de database maar hoeft niet altijd op het formulier te komen, das afhankelijk van wat de gebruiker wilt.
In dit geval gaat het om aanhef, als de gebruiker die op het formulier wil dan wil ik ervoor zorgen dat als ze een "d" intypen dat er "dhr" verschijnt en de "m" voor "mevr".
ik heb dus het volgende event daarvoor gemaakt:
Visual Basic .NET:
1
2
3
4
    Private Sub tbAanhef_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If Lcase(tbAanhef.Text) = "d" Then tbAanhef.Text = "Dhr"
        If Lcase(tbAanhef.Text) = "m" Then tbAanhef.Text = "Mevr"
    End Sub

Alleen tbAanhef is hier nog een statische textbox, deze wil ik dus variabel kunnen maken.
Ik heb op internet gezocht naar addressof en wordt dan eigenlijk doorverwezen naar delegates.
Daar is veel info over te vinden en op alle sites die ik heb bezocht staat eigenlijk een beetje hetzelfde,
heel eenvoudig een msgbox laten zien met een waarde die geinvoked wordt. Das allemaal leuk en aardig en eenvoudig maar ik zie daar geen verband in met wat ik wil (misschien is die er wel).

Ik hoop dat iemand mij op weg kan helpen en in de juiste richting kan sturen.
Ik hoop dat ik mijn doel duidelijk heb beschreven, zo niet, feel free to ask. :)

Verwijderd

<jouw control>.OnTextChanged += <jouw TextChanged delegate>
Zoiets?

[ Voor 4% gewijzigd door Verwijderd op 02-05-2007 15:55 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 01-07-2023
Verwijderd schreef op woensdag 02 mei 2007 @ 15:54:
<jouw control>.OnTextChanged += <jouw TextChanged delegate>
Zoiets?
Het is geen C# ;), AddHandler heet dat in vb.net


Visual Basic .NET:
1
    AddHandler Control.TextChanged, AddressOf tbAanhef_TextChanged

[ Voor 17% gewijzigd door Serpie op 02-05-2007 16:03 ]


  • Vedett.
  • Registratie: November 2005
  • Laatst online: 08:28
Ik zie geen verband met wat ik wil
Ik heb juist de andere indruk.
Als je een dynamische control maakt, kan je met AddHandler in vb een methode aan een event koppelen met een delegate.

Ik zou die site dus toch eens goed lezen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 02 mei 2007 @ 15:46:
Alleen tbAanhef is hier nog een statische textbox, deze wil ik dus variabel kunnen maken.
Het eerste gedeelte van je vraag heb je al beantwoord. Het tweede gedeelte is door de sender te casten naar een Textbox. De rest is dan wel in te vullen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Serpie schreef op woensdag 02 mei 2007 @ 16:00:
[...]


Het is geen C# ;), AddHandler heet dat in vb.net
Bedankt, ik snapte daar al niks van.
Maar OnTextChanged is geen property van mijn control.
En die tbAanhef moet als parameter worden meegegeven toch ? want die is van tevoren nog niet bekend, die komt uit de database.
Ik heb het volgende geprobeerd:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Delegate Sub AanhefText(ByVal tbAanhef As TextBox)
Private _aanhef As New AanhefText(AddressOf tbAanhef_TextChanged)

    Private Sub tbAanhef_TextChanged(ByVal tbAanhef As TextBox)
        If LCase(tbAanhef.Text) = "d" Then tbAanhef.Text = "Dhr"
        If LCase(tbAanhef.Text) = "m" Then tbAanhef.Text = "Mevr"
    End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If LCase(row.Item("CTR_Naam")) = "aanhef" Then 'als control aanhef is
                _aanhef.Invoke(Me.Controls("tbaanhef")) 'control meegeven als parameter
            End If
end sub

Alleen er gebeurd niks, ik had dat ook niet verwacht natuurlijk.
Want er wordt nergens aangegeven op welke event er gereageerd moet worden (textchanged zou dat moeten zijn). Ik hoop dat iemand mij verder kan helpen

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

Hebben we het over Webforms of Winforms, btw?
Verwijderd schreef op woensdag 02 mei 2007 @ 16:12:
Maar OnTextChanged is geen property van mijn control.
Nee, maar wel een TextChanged event. Zie http://msdn2.microsoft.co....control.textchanged.aspx

[ Voor 77% gewijzigd door gorgi_19 op 02-05-2007 16:16 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 02 mei 2007 @ 16:13:
Hebben we het over Webforms of Winforms, btw?
Winforms
gorgi_19 schreef op woensdag 02 mei 2007 @ 16:13:
Hebben we het over Webforms of Winforms, btw?


[...]

Nee, maar wel een TextChanged event. Zie http://msdn2.microsoft.co....control.textchanged.aspx
Ja dat klopt, zo doe ik dat normaal ook als ik de control (textbox) op het formulier heb staan.
Aangezien ik dat nu heb en ik deze pas in het form_load aanmaak vanuit een database.

[ Voor 59% gewijzigd door Verwijderd op 02-05-2007 16:24 ]


Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 02 mei 2007 @ 16:11:
[...]

Het eerste gedeelte van je vraag heb je al beantwoord. Het tweede gedeelte is door de sender te casten naar een Textbox. De rest is dan wel in te vullen :)
Oke dat heb ik gedaan, het werkt nu trouwens tot mijn eigen verbazing.
Ik zal de code laten zien:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Delegate Sub AanhefText(ByVal tbAanhef As TextBox)
Public Event TextChanged As EventHandler

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       If LCase(row.Item("CTR_Naam")) = "aanhef" Then
           AddHandler Me.Controls("tbaanhef").TextChanged, AddressOf tbAanhef_TextChanged
       End If
End Sub

    Private Sub tbAanhef_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim tbAanhef As TextBox
        tbAanhef = CType(sender, TextBox)
        If LCase(tbAanhef.Text) = "d" Then tbAanhef.Text = "Dhr"
        If LCase(tbAanhef.Text) = "m" Then tbAanhef.Text = "Mevr"
    End Sub
Echt super relaxt dit :*) bedankt :D

Verwijderd

Verwijderd schreef op woensdag 02 mei 2007 @ 16:12:
Bedankt, ik snapte daar al niks van.
Maar OnTextChanged is geen property van mijn control.
Best wel geniaal van mijzelf... ;)
Eerst C# code posten op een VB.NET vraag, en daarna OnTextChanged noemen i.p.v. TextChanged.

Verklaring voor 't laatste: ik programmeer vooral in Delphi, en daar begint de routine die een delegate/event aan moet roepen meestal met On, en de event handler die je er design time aan kunt hangen juist niet. Bij .NET/C# is dit precies andersom.
Geen flauw idee waarom Anders Hjellberg (architect van zowel Delphi als .NET/C#) die boel heeft omgegooid, maar 't blijft mij achtervolgen... :?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 02 mei 2007 @ 16:35:
Verklaring voor 't laatste: ik programmeer vooral in Delphi, en daar begint de routine die een delegate/event aan moet roepen meestal met On, en de event handler die je er design time aan kunt hangen juist niet. Bij .NET/C# is dit precies andersom.
Geen flauw idee waarom Anders Hjellberg (architect van zowel Delphi als .NET/C#) die boel heeft omgegooid, maar 't blijft mij achtervolgen... :?
OnTextChanged is geloof ik een protected method (althans, in de ASP.Net controls) welke overriden kunnen worden. TextChanged is een event die geraised wordt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1