vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
String 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String an Button.Click weitergeben 
Autor: ModeratorFZelle (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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String an Button.Click weitergeben 
Autor: ModeratorDaveS (Moderator)
Datum: 23.06.11 14:19

Das geht nicht bei dir?

    Private Class MyEA
        Inherits EventArgs
        Public xxx As String = "Some garbage"
    End Class
 
    Private Sub Button99_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button99.Click
        Button1_Click(Button99, New MyEA)
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        Dim myea1 As MyEA = TryCast(e, MyEA)
        If myea1 IsNot Nothing Then
            MsgBox(myea1.xxx)
        End If
    End Sub
Natürlich ist der Downcast in Button1_Click() nicht schön und das war ohnenhin nur ein Scherz, hoffe ich...

Wieso habe ich nur EDGE und keine UMTS/HSPA? Ganz wie alte Zeiten.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String an Button.Click weitergeben 
Autor: ModeratorDaveS (Moderator)
Datum: 23.06.11 15:11

Was immer du jetzt damit sagen willst, man nimmt an das hatte etwas mit dem Vorschlag von Code_mancer zu tun. Man kann eben problemlos abgeleitete EventArgs übergeben.

Aber du willst also jetzt Buttons als Behälter für Anwendungsdaten benutzen? Was es alles gibt.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String an Button.Click weitergeben 
Autor: ModeratorDaveS (Moderator)
Datum: 23.06.11 16:33

Keine Ahnung was du damit meinst. Aber inzwischen ist der Scherz irgendwie abgelaufen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel