wie bei EINEM Handler für mehrere Textboxen herausfinden welche das Event ausgelöst hat

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von eichseinet.

    wie bei EINEM Handler für mehrere Textboxen herausfinden welche das Event ausgelöst hat

    Hallo!

    Bei einem Doppelklick auf eine zur Laufzeit erstellten Textbox wird ein Event aufgerufen. Hier soll der Inhalt dieser Textbox in eine Variable geschrieben werden. Leider konnte ich noch keine Lösung finden, wie die richtige Textbox angesprochen werden soll.

    VB.NET-Quellcode

    1. Dim tbliste As New List(Of TextBox)
    2. Dim texthöhe As Integer = 200, textbreite As Integer = 200, textbtnr As Integer = 0


    VB.NET-Quellcode

    1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    2. tbliste.Add(New TextBox)
    3. tbliste(textbtnr).Name = "tbliste" & textbtnr.ToString
    4. tbliste(textbtnr).Location = New Point(listbreite, texthöhe)
    5. tbliste(textbtnr).Size = New Size(100, 50)
    6. tbliste(textbtnr).Text = "textbox" & textbtnr.ToString
    7. AddHandler tbliste(textbtnr).DoubleClick, AddressOf eventclick3
    8. Me.Controls.Add(tbliste(textbtnr))
    9. texthöhe = texthöhe + 30
    10. textbtnr = textbtnr + 1
    11. End Sub


    VB.NET-Quellcode

    1. Private Sub eventclick3(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Variable = tbliste.item(????) 'statt der Fragezeichen brauch ich jetzt die Nummer, die das Event hier ausgelöst hat
    3. End Sub


    Statt der Fragezeichen brauch ich jetzt die Nummer, die das Event hier ausgelöst hat. Wie macht man so etwas?
    Feste Größenvorgaben kommen übrigens nicht in Frage. Das Projekt wächst immer weiter und schon bei der momentanen Größe sind über 10000 Textboxen nötig.

    Gruß

    eddi
    Hab ich mir auch gedacht, aber ich kann damit nicht umgehen.

    VB.NET-Quellcode

    1. Private Sub eventclick3(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim variable As String
    3. variable = tbliste.Item(sender).Text
    4. End Sub


    Dieser Versuch bringt ne Fehlermeldung: Ungültige Konvertierung von Typ TextBox in Typ Integer

    Gruß

    eddi

    VB.NET-Quellcode

    1. Private Sub eventclick3(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. 'ist relativ unschön denn sender MUSS eine textbox sein, evtl prüfen lassen!
    3. Dim NameDerTextbox As String = sender.Name
    4. 'der aufbau des textboxnamens ist ja: "tbliste" & nummer
    5. 'einfach mit dem mid befehl die nummer herauslesen und in einen integer umwandeln
    6. Dim nummer As Integer = -1
    7. If IsNumeric(Mid(NameDerTextbox, 8, NameDerTextbox.Length - 7)) = True Then
    8. nummer = CInt(Mid(NameDerTextbox, 8, NameDerTextbox.Length - 7))
    9. End If
    10. If nummer <> -1 Then
    11. '..dein code
    12. End If
    13. End Sub



    achso, versuch doch nicht auf textboxen zurückzugreifen. es gibt da ja auch andere möglichkeiten... lg

    eichseinet schrieb:

    Habe wohl die neu Sportart aus Amerika gemacht: ExtremAufDemSchlauchStehing! (kennt das noch einer?)

    variable = sender.text

    So einfach kann's sein. Eure Lösungen seh ich mir morgen auch noch genauer an. Jetzt ist es echt Zeit für die Kiste; muss frü raus.

    Damke an alle.

    eddi

    die sportart mache ich jetzt auch weil sender.text ist ja der wie da steht der text der in die textbox steht auf die doppelgeklickt wurde... wiegesagt, der text der in die textbox geschrieben wurde und das kann doch alles sein, vor allem alles andere als eine zahl?!?
    Wenn ich das jetzt nich falsch verstanden habe meinst Du es so:

    VB.NET-Quellcode

    1. Private Sub eventclick3(ByVal sender As Object, ByVal e As EventArgs)
    2. Dim SenderTextBox As TextBox = DirectCast(sender, TextBox)
    3. 'Ich würde bim Zuweisen des Name der TextBox bei Button5_Click einen Unterstrich zwischen "tbliste" und textbtnr.ToString setzen, also "tbliste_" & textbtnr.ToString
    4. 'Damit wird die Nummer der TextBox herausgefunden
    5. Dim SenderNummer As Integer = CInt(SenderTextBox.Name.Split("_"c).Last) 'Wenn der Name z.B. so aussieht: "tbliste_4"
    6. 'Damit wird der Text der TextBox herausgefunden
    7. Dim SenderText As String = SenderTextBox.Text
    8. End Sub


    Wenn man in der Sub nur einmal auf die TextBox zugreift kann man sich die Variable SenderTextBox auch sparen und gleich DirectCast(sender, TextBox).Name.... verwenden (oder .Text, etc.).


    Und natürlich: wenn diese Sub von einem anderen Steuerelement als einer (zur Laufzeit hinzugefügten) TextBox (mit dem Name im Format "tbliste_1") gibt's natürlich einen Fehler, aber das dürfte eigentlich nicht passieren, es sei denn AddHandler wird irgendwo falsch verwendet.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @FreakJNS: Der eigentliche Auftrag meiner Funktion lautet; wenn ich einen Doppelklick auf Textbox #32 mache, dann übertragen Textbox32.text in eine Variable.
    Da ich noch ganz neu bin im Geschäft der zur Laufzeit erzeugten Elemente hatte ich keine Ahnung wie man das löst. Füge ich in mein Projekt eine Textbox ein und mach nen Doppelklick drauf, dann hat VB2008 für mich alles angelegt. Nur die richtige Aktion (also Click, doubleclick...) muss ich noch einstellen. Das kann jeder Doofe; also auch ich. ;)
    Unter dem "Sender" hatte ich eigentlich eine ID verstanden, mit dem der PC sagt "Objekt Nr. 32 hat diese Funktion angefordert". Daher entstand folgender falsche Code:

    VB.NET-Quellcode

    1. Private Sub eventclick3(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim variable As String
    3. variable = tbliste.Item(sender).Text
    4. End Sub


    Der sollte die ID des Senders lesen, um auf die richtige Textbox zugreifen zu können.
    Dann fiel aber der Groschen; das Objekt Sender übernimmt wohl komplett die Eigenschaft des ursprünglichen Objekts, also hier meiner Textbox. Daher können auch all die Funktionen genutzt werden, obwohl diese nicht wie üblich als Vorschlagswerte auftauchen, wenn sender. geschrieben hat. Damit kann ich mir eine Auswertung einer ID und allen anderen Programmieraufwand sparen. Ich kann DIREKT auf meinen Text zugreifen.
    Bei meiner Suche im Netz bin ich auch auf kein Beispiel gestossen, dass den Sender so einsetzt.

    Danke für die Tipps

    Gruß eddi