| |
VB.NET - Ein- und UmsteigerString an Button.Click weitergeben | | | Autor: Theo_kkv | Datum: 23.06.11 10:30 |
| Hallo,
in einer privaten Funktion lasse ich den Pfad einer PDF-Datei aus meiner Datenbank ermitteln. Jetzt wollte ich diese Pfadangabe an das klassische Button.Click Ereigniss übergeben. In der Signatur kann aber nur
(ByVal sender As System.Object, ByVal e As System.EventArgs) übergeben werden.
Bleibt nur der Weg, die Variable als Private zu deklarieren?
Tom | |
Re: String an Button.Click weitergeben | | | Autor: FZelle (Moderator) | Datum: 23.06.11 11:49 |
| An einen ButtonClick?
Du meinst wenn der Button geclickt wird, wird die Aktion mit dem Dateinamen ausgeführt.
Ja, dafür musst du eine Klassenvariable haben.
Ob die Private,Protected oder Public ist, kommt auf den Anwendungsfall an. | |
Re: String an Button.Click weitergeben | | | Autor: Code_mancer | Datum: 23.06.11 12:34 |
| Er könnte aber auch eine eigene Klasse ClickEventArgs erstellen, die von EventArgs erbt und ein Property vom Typ String hat, so könnte er über den EventArgs-Parameter die String Information übergeben :P
--------------------
Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein | |
Re: String an Button.Click weitergeben | | | Autor: Preisser | Datum: 23.06.11 13:25 |
| Hallo,
aber das würde dann ja nur funktionieren, wenn er das Click-Ereignis manuell, also von einer anderen Funktion heraus aufruft, dann bräuchte er ja gleich kein Click-Ereignis mehr, bzw. könnte irgend eine andere Funktion aufrufen. Ereignishandler sind ja dazu da, dass ein Steuerelement sie aufruft, wenn eine bestimmte Aktion wie Klicken durchgeführt wurde.
Wenn man bei einem Button-Click-Ereignis eine andere Variable braucht, kann man, wie FZelle schon sagt, sie z.B. global (innerhalb der Klasse) deklarieren, oder man erstellt in einer Funktion, die die Variable hat, einen Delegaten auf eine innere anonyme Funktion, die die Variable benutzt, und fügt das dann als Ereignishandler hinzu (wenn für die gesamte Dauer immer die gleiche Variable benutzt werden soll, sonst müsste man wieder einen neuen Ereignishandler erstellen).
Z.B. sowas (Form1 mit Button1):
Public Class Form1
Sub New()
InitializeComponent()
ErstelleZufallszahlFuerButton()
End Sub
Private Sub ErstelleZufallszahlFuerButton()
Dim Zahl As Double = New Random().NextDouble()
AddHandler Button1.Click, Sub(sender As System.Object, e As _
System.EventArgs)
MessageBox.Show("Die Zahl ist " & Zahl)
End Sub
End Sub
End Class Immer wenn man dann auf den Button1 klickt, kommt die Meldung mit der vorher festgelegten Zahl.
Beitrag wurde zuletzt am 23.06.11 um 13:29:06 editiert. | |
Re: String an Button.Click weitergeben | | | Autor: Manfred X | Datum: 23.06.11 14:04 |
| Hallo!
Die Signaturen der Control-Events sind festgelegt.
So weit mir bekannt, kann man die abgeleitete Klasse eines e-Parameters
im Handler durch die Basisklasse ersetzen - aber nicht umgekehrt.
Private Sub ClickIt(sender As Object, e As System.EventArgs) Handles _
TextBox1.Click, TextBox1.MouseClick
End Sub | |
Re: String an Button.Click weitergeben | | | Autor: Preisser | Datum: 23.06.11 14:18 |
| Hallo,
was meinst du denn damit? Natürlich muss die als Handler benutzte Methode eine Signatur haben, die das Übergeben eines bestimmten Typs zulässt, also hier ein Typ, der ein System.EventArgs-Objekt aufnehmen kann (also auch Klassen, die eine Oberklasse von EventArgs sind (wie Object)). Klar kann man das e-Argument des Click-Handlers nicht einfach als eine von EventArgs abgeleitete Klasse festlegen, sonst könnte sie ja vom Steuerelement nicht mehr aufgerufen werden.
Wenn man da eine von EventArgs abgeleitete Klasse übergeben will, müsste man halt im Click-Ereignishandler prüfen, ob das Objekt tatsächlich von dem Typ ist und es dann hochcasten. Aber wie bereits gesagt, würde das ja nur gehen, wenn man die Methode manuell aufruft, und dann bräuchte man gleich keinen Click-Handler mehr.
Beitrag wurde zuletzt am 23.06.11 um 14:26:04 editiert. | |
Re: String an Button.Click weitergeben | | | Autor: Manfred X | Datum: 23.06.11 14:51 |
| Hallo!
Ich habe von Handler-SIGNATUREN geschrieben,
nicht davon, ob man einen Eventhandler benutzen kann,
um im Code einen Funktionsaufruf abzusetzen.
Ich würde in dem Fall einen abgeleiteten Button um einige
Eigenschaften erweitern und den Sender-Parameter analysieren.
MfG
Manfred | |
Re: String an Button.Click weitergeben | | | Autor: Manfred X | Datum: 23.06.11 16:00 |
| [I]Man kann eben problemlos abgeleitete EventArgs übergeben.[/I]
Aber nicht im Rahmen der Parameter, die bei einem Click auf den Button
geliefert werden. Das ist die einschränkende Info auf die es mir ankommt. | |
Re: String an Button.Click weitergeben | | | Autor: Manfred X | Datum: 23.06.11 18:12 |
| Hallo!
Falls Du keine formularglobale Variable für den Pfad verwenden
willst, gibt es noch ein andere einfache Alternative.
Der Windows.Forms.Button hat eine Tag-Eigenschaft.
Du kannst in Deiner Funktion die Instanz eines beliebigen
Objekts darauf zuweisen und sie in Ereignishandlern des
Buttons per Sender-Parameter abfragen.
Zuweisung eines String: Button1.Tag = "mein Pfad"
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim str As String = CType(CType(sender, Button).Tag, String)
'............
End Sub Eventuell vorher noch den Typ des Objekts ermitteln, falls Instanzen
unterschiedlicher Objekte zugewiesen werden (weniger empfehlenswert!)
MfG
Manfred | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|