SeaStorm Geschrieben 16. Juli 2009 Geschrieben 16. Juli 2009 Hi Ich erzeuge beliebig viele Textboxen dynamisch. Diese bekommen jeweils über AddHandler einen KeyPress Event zugewiesen. Nun feuert dieses Event auch brav, aber ich weiss nun innerhalb dieses Events ja nicht welche Box gerade geändert wurde. Oder doch ? Ich muss irgendwie herausfinden wie der Inhalt der TextBox ist. So schaut das ganze dann am Ende bei mir aus Dim txtLiefVon(_n) As Windows.Forms.TextBox ...(code und schleife) txtLiefVon(count) = New Windows.Forms.TextBox AddHandler txtLiefVon(count).KeyPress, AddressOf txtLiefVon_KeyPress .... Private Sub txtLiefVon_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) ....(MachWas) End Sub wie kann ich nun also in dem Event sagen MsgBox(geänderte_textbox.text) ?! Stehe völlig auf dem schlauch :\ Gruss Sea Zitieren
GuntiNDDS Geschrieben 16. Juli 2009 Geschrieben 16. Juli 2009 über das Objekt sender. Beispiel (C#-Code): if (gettype(sender)==typeof(system.windows.forms.textbox)) { messagebox.show( ((system.windows.forms.textbox)sender).name); } .. Zitieren
GuntiNDDS Geschrieben 16. Juli 2009 Geschrieben 16. Juli 2009 meinte sender.gettype(), nicht gettype(sender) Zitieren
SeaStorm Geschrieben 16. Juli 2009 Autor Geschrieben 16. Juli 2009 über das Objekt sender. Beispiel (C#-Code): if (gettype(sender)==typeof(system.windows.forms.textbox)) { messagebox.show( ((system.windows.forms.textbox)sender).name); } .. argl .. jo dachte ich mir auch so. Das tolle IntelliSense hats net angezeigt ... Manman ich werde weich dadurch Danke ! Zitieren
Kosinator Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Ist das nicht zu viel Overhead? Wenn du weißt, dass nur deine Textboxen das Event feuern, kannst du auch einfach sowas machen: messagebox.show(String.Format((textbox)sender).name + " " + (textbox)sender).text); Oder textbox tbx = (textbox)sender; mb[TabTab]String.Format(tbx.name + " " + tbx.text); Also das selbe wie SeaStorm sagt, nur ohne die if-Abfrage (wenn du sicher bist, dass nut deine textboxen das Event feuern) Alternativ kannst du natürlich auch deine eigenen AventArgs definieren und e.tbName und e.tbText abfragen, dann hast du noch weniger ungenutzte Informationen gebraucht. Aber eigendlich ist das alles völlig ähnlichwertig, den Zeiger eben auf ein anderes Objekt im RAM zu verlegen kostet überall ähnlichviel (glaube ich), und der Compiler (pre-compiler) optimiert eh noch einiges zurecht (schneller und so), also, machs am besten wie SeaStorm geschrieben hat. Vllt. noch ein Debug.Assert(false) im else-Teil (falls doch mal wer anders das Event feuert) oder so.... Ich merke gerade, ich habe zu viel Zeit... muss mal arbeiten, also dann, gruß Kosi Zitieren
0815FIA Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 if (gettype(sender)==typeof(system.windows.forms.textbox)) { messagebox.show( ((system.windows.forms.textbox)sender).name); } warum so lang? if(sender is TextBox){} Zitieren
GuntiNDDS Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 ich binn ja nicht hier 'angetreten' um besonders schönen oder effizienten code darzustellen, sondern um zu verdeutlichen, wie das vom OP beschriebene Problem gelöst werden kann. ich sag auch mal, liebe eine if-abfrage mehr und entsprechend mehr overhead als hinterher ein unbehandelter Fehler. Glaube nicht das sich die eine Abfrage mehr oder weniger in irgenteiner Weise -messbar-, geschweige denn -spürbar- performance-technisch auswirkt Das IS Schlüsselwort war mir nocht nicht bekannt. Find ich gut Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.