MsgBox Für Jedes Label

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Torty H.

    MsgBox Für Jedes Label

    Moin Moin liebe Vbler


    Ich habe ein Kleines Problem und Zwar


    ich Habe 96 Labels

    in diesen Labels stehen jeweils unterschiedliche Datums drinne

    ich habe ne DB die ich mittels php auslese

    die jede einzelene Label BackColor ändert

    zb

    Lable1 -> 17.12.2011 = Bezahlzt = backcolor = Blau
    Lable2 -> 17.11.2011 = Nichts = backcolor = schwarz
    Lable3 -> 17.10.2011 = nicht bezahlt = backcolor = Rot
    ..
    ..
    ..


    SO nun wen ich auf ein Lable Klicke soll eine MSGbox mit Result (Ja/Nein) aufgehen

    ich möchte jetzt aber nicht jede einzeles Label eine msgbox Programmieren


    wie könnte ich die Labels noch abfragen ohne alle 96 einzeln anzuklicken und da ne msg box reinbauen muss


    Ich hoffe das war verständlich

    MfG Torty
    96 Labels

    sind 4 * 24 Labels

    24 Lables für max 24 Monate


    Bsp Kunde mietet

    ein buch für 24 monate
    der
    Zahlungsintervall ist Monatlich

    Ich möchte dann das mir alle Zahlungsmontae aufgelitstet werden und zwar in vordefinierten Labels

    // Buch

    24 Monate
    24 Zahlungen
    24 Labels

    // Knoblauch

    24 Monate
    12 Zahlungen
    12 von 24 Labels

    usw


    ich versuche mir sozusagen eine übersicht meiner kunden zu erstellen
    exel mag ich nicht ;)



    Die msg Box soll dazu dienen


    das ich die Frabe (Status) umstellen kann von Bezahlt auf Nicht bezahlt

    (Result Ja) = Bezahlt
    (Result Nein) = Nicht Bezahlt (Kunde Sperren)
    Wie hast du die Label benannt ?
    Wenn diese Label01.. Label02.. label03.. heißen machst du einfach eine Do while schleife..

    Sprich du schreibst eine MessageBox und einen Counter.
    Der Counter fängt bei "01" an.
    Damit liest du den ersten Laben aus.
    Dann erhöhst du den Counter um +1
    dadurch kommst du auf Label02
    u.s.w
    joa das verstehe ich ja nur wie mache ich das mit dem Click event

    ich möchte ja auf ein der 24 Lables Klicken dann geht die MsgBox auf

    ich möchte aber nicht 24 bzw 96 msg boxen Bauen ...


    VB.NET-Quellcode

    1. Private Sub z1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles z1.Click
    2. '' Hier die MSGBOX
    3. End Sub


    so wäre es ja normal aber diese Prozedur ist doch viel zu aufwendig bei 96 Labels
    Quick and Dirty:

    VB.NET-Quellcode

    1. Public Function TextReader(ByVal LabelName As String) As String
    2. MsgBox(Replace(LabelName, "System.Windows.Forms.Label, Text:", ""))
    3. Return ("0")
    4. End Function
    5. Private Sub Label9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click
    6. TextReader(sender.ToString)
    7. End Sub

    Ich habe eine Funktion geschrieben, welches leiglich den Übergabeparameter brauch: "sender.ToString"
    Was du bis jetzt brauchst ist für jedes jeweilige Label ein Click Event. Der Funktion übergibst du dann den
    oben genannten Übergabeparameter und das wars.

    Ich probier mal ein wenig rum, ob es dabei noch eine einfachere Methode gibt.
    Wenn ich was finde, poste ich es ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Annoxoli“ ()

    Joa so enlich hab ich es ich habs so


    VB.NET-Quellcode

    1. Dim auswerten As String
    2. Sub auswertenung()
    3. MsgBox(auswerten)
    4. End Sub
    5. Private Sub z1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles z1.Click
    6. auswerten = "1"
    7. Call auswertenung()



    ich möchte die Klicks Irgendwie abfangen so das ich net in jeses Label was rein coden muss
    Für so etwas gibt es die AddHandler Methode, mit der Du Events ( in diesem Fall Label.Click ) eine zusätzliche Handler-Methode zuweisen kannst.

    Wenn diese Label dynamisch erzeugt werden, gleich bei der Erstellung ... falls Du sie im Formulareditor definiert hast, so kannst Du sie im Form-Load Event nachträglich per While Schleife über die Controls dranpappen.

    Grundsätzlich bin ich aber der Meinung dass 96 Label etwas reichlich sind , gibt es keine andere Lösung ( Listview Control, Usercontrol + GDI) ?
    Die Labels sind schon auf der form und werden nicht dynamisch erstellt

    und wie Fange ich die Labels bzw den Klick der Labels ab die controls kann ich ja auflisten kein Problem
    nur das abfangen weiß ich nicht

    andere Lösung oO hab ich noch nicht darüber nachgedacht

    weil ich es so übersichtlich finde

    Listview ist untereinander ich brauche aber 6 Lables nebeneinander

    mom screen ^
    Siehe oben Rechts

    Torty H schrieb:

    und wie Fange ich die Labels bzw den Klick der Labels ab die controls kann ich ja auflisten kein Problem
    nur das abfangen weiß ich nicht


    Beispiel

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ' jedem Label auf der Form welches mit lblZahlung anfängt ein Click-Event verpassen
    3. For Each c As Control In Me.Controls
    4. ' kein label ? -> nächstes
    5. If Not (TypeOf (c) Is Label) Then Continue For
    6. ' erfüllt nicht Kriterien ?
    7. If Not (c.Name.ToLower.StartsWith("lblzahlung")) Then Continue For
    8. ' verpasse Click-Handler
    9. AddHandler c.Click, AddressOf LabelClickHandler
    10. Next
    11. End Sub
    12. ' click handler für lblZahlungXX
    13. Private Sub LabelClickHandler(ByVal sender As Object, ByVal e As EventArgs)
    14. ' aufrufendes Label ermitteln
    15. Dim lbl As Label = CType(sender, Label)
    16. ' Properties verändern oder sonstwas
    17. MessageBox.Show(String.Format("ich bin das Label {0} mit dem Text {1} und der Farbe {2}", lbl.Name, lbl.Text, lbl.BackColor.ToString))
    18. End Sub



    P.S: Listview hat genauso Spalten wie ein Datagrid oder DatagridView, aber mach es halt so wie Du es am besten findest.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kangaroo“ ()

    Du solltest viel mehr Leerzeilen in deine Posts bringen, scrollen ist sooo geil. Vielleicht alle Buchstaben untereinander setzen?

    OK:
    Deine Anwendung riecht sehr nach Tabellen und du sprichst ja auch von einer DB. Sieh dir mal die Dataset-Klasse an und das Datagridview. "Erfinder des Rades" hat zum Theme Databänkern etliche Links und Tuts ins Forum gestellt. Das is einfacher als man denkt und deutlich flexibler als das Labelrumgeschubse von deins da. Denke da ma drüber nach.

    Zu deiner Frage der auswertung des Klick-Events der Labels: Wie du viele Labels auf eine Eventsub schaltest hast du ja mitbekommen? An die Event-Sub einfach mit Komma getrennt die Labels hinterschreibsen:

    VB.NET-Quellcode

    1. Private Sub Labels_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
    2. Label1.Click, Label2.Click, Label3.Click, Label4.Click, Label5.Click....
    3. 'Code
    4. End Sub

    Die Variable Sender gibst dir des angeklickste Label als Object zurück. Dieses kannst du mit Dim geklickstesLabel as Label = Directcast(sender, Label) in einLabel umwandeln und hast denn alle Eigenschaften/Methoden des Labels zur Verfügung. Nutze die Eigenschaft Name, um die Dingers zu unterscheiden.
    auch hast du 3 fast identische Gruppen an Labels. Fasse die doch jeweils zu einem Usercontrol zusammen. Da kannst du dann alles solche Subs und Funktionen auslagern, ohne Spagetticode zu schreiben.

    Aber wie gesagt, ich rate dir zu obigem mit Datagridview. Vereinfacht dein Vorhaben vermutlich um Welten.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    Kangaroo schrieb:

    Aber aus lauter schlechtem Gewissen habe ich jetzt noch nachträglich brav einen Expander um meinen Code gewuselt

    Mistverständnis: Des mitte Leerzeilen galt dem TE :)
    Ganz sischer, bei 99 Labels wirds schwer, desterwegne hab ich ja auch annere Vorschlägs unterbreitet: Datagridview bzw. Usercontrols mit in diesem Fall 24 Labels.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Nun-ja hab ja wie Ihr auf dem Bild schon sehen könnt 4 Gruppen
    die zu je aus 24 Labels bestehen

    der inhalt ergibt sich aus einer for schleife


    mit Datagridview der ähnliches hab ich bis jetzt noch zu wenig bzw gar keine Verwendung gehabt ich mach es immer Statisch

    das Programm ist in erster linie für mich selbst (Keine ausrede ich weiß)

    ich werde mir das Datagridview nacher mal anschauen


    Thx euch allen