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
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); } ..
GuntiNDDS Geschrieben 16. Juli 2009 Geschrieben 16. Juli 2009 meinte sender.gettype(), nicht gettype(sender)
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 !
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
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){}
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden