Lagermodul mit vielen Button

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Raffi95.

    Lagermodul mit vielen Button

    Hallo
    Ich würde gerne ein kleines Lagermodul programmieren mit einer "grafischen Oberfläche".

    Ich habe das Lager mit Hilfe von Buttons angebildet, wobei jeder Button ein Lagerplatz darstellt.
    Oben habe ich dann ComboBoxen wo man entsprechend den Gang, Regalnr, und Fach auswählen kann.

    Nun möchte ich gerne, dass beim auswählen über die ComboBoxen die Button sich entsprechend färben (Hintergrundfarbe)
    welche ausgewählt wurde. Also wenn Gang ausgewählt wurde, soll sich der Gang färben und sobald das Regal in dem Gang ausgewählt
    wurde, wird nur noch das Regal farbig markiert.
    Muss ich hierfür für jede Variante eine If-Abfrage festlegen oder gibt es da einen Trick?

    Visual Basic-Quellcode

    1. Private Sub ShowLagerplatz()
    2. If Me.cboGang.Value = "A" Then
    3. If Me.cboRegal.Value = "1" Then
    4. A1.BackColor = &H80FF80
    5. End If
    6. End If
    7. End Sub


    Weiterhin will ich, dass über den Klick auf den entsprechende Button im Layout (welcher ein Regal suggeriert), dieser natürlich eingefärbt wird
    und entsprechend in der Combobox die Daten dafür eingetragen werden.
    Muss ich hierfür auch für jeden Button dieses Ereignis festlegen oder gibt es auch hier eine bessere Lösung?
    Dachte das man vielleicht über die Bennenung der Button irgendwie mit schleifen arbeiten kann.


    Vielen Dank
    Hallo!

    Die optimale Lösung wäre mit Klassen zu arbeiten. Da muss ich mal schauen wo ich meine Beispielcodes habe (ich habe das schon sehr lange nicht mehr gemacht). Aber Du kannst ja mal über Google nach Beispielen suchen.

    Gruß, René
    Also interessant wäre eine Möglichkeit, wie man die sache deutlich verkürzen kann.

    Wenn ich beispielsweise 80 Button haben mit Regalfächern, und alle sind beschriftet mit A1, A2...B1,B2....
    dann müsste ich für alle einzeln ein Befehl schreiben, dann wenn A1 angeklickt wird, er
    dann in der ComboBox bei Gang:A und Regal: 1 auswählt. Wäre das nicht möglich indem man den Namen
    den Button ausliest, wenn der "A1" benannt ist. Das vielleicht mit der Funktion Left oder Right?
    Wie jedoch bekommt man es hin, das es für die ausgewählten Button gilt?

    Oder das der Button sich färbt, welcher oben dann entsprechend in der ComboBox gewählt wurd.
    Da kann man ja nicht für 80 Button dies so machen müssen.
    (subAlleButtonFarbe sorgt dafür, dass alle Button in der Ausgangsfarbe zurückgesetzt werden)


    Visual Basic-Quellcode

    1. Private Sub ShowLagerplatz()
    2. If Me.cboReihe.Value = "A" Then
    3. If Me.cboRegal.Value = "1" Then
    4. subAlleButtonFarbe
    5. A1.BackColor = &H80FF80
    6. End If
    7. If Me.cboRegal.Value = "2" Then
    8. subAlleButtonFarbe
    9. A2.BackColor = &H80FF80
    10. End If
    11. If Me.cboRegal.Value = "3" Then
    12. subAlleButtonFarbe
    13. A3.BackColor = &H80FF80
    14. End If
    15. If Me.cboRegal.Value = "4" Then
    16. subAlleButtonFarbe
    17. A4.BackColor = &H80FF80
    18. End If
    19. End If
    20. End Sub

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

    Ok habe ein wenig rumgespielt und nun folgendes Problem.
    Die angeklickten Button färben sich und übertragen auch die Bezeichnung an die ComboBox, jedoch würde ich diese
    Funktion gerne auf einen Frame einschränken. Irgendwie funktioniert das nicht wenn ich sagen

    Visual Basic-Quellcode

    1. For Each cmd in frmLager.frame1.Controls


    Visual Basic-Quellcode

    1. Option Explicit
    2. Public WithEvents cmd As MSForms.CommandButton
    3. 'erfasst den linken und rechten Teil des Button-Namens und gibt in weiter an die Combobox.
    4. Public Sub cmd_Click()
    5. Reihe = Left(cmd.Name, 1)
    6. Regal = Right(cmd.Name, 1)
    7. frmLager.cboReihe.Value = Reihe
    8. frmLager.cboRegal.Value = Regal
    9. subAlleButtonFarbe
    10. cmd.BackColor = &H80FF80
    11. End Sub
    12. 'Färbt alle Button wieder standardmäßig, dass beim klicken eines neuen, der allte wieder rückgeängig gemacht wir
    13. Private Sub subAlleButtonFarbe()
    14. Dim ctl As Object
    15. For Each ctl In frmLager.Frame1.Controls
    16. If TypeName(ctl) = "CommandButton" Then
    17. ctl.BackColor = &H8000000F
    18. End If
    19. Next
    20. End Sub
    Vielleicht hilft dir das weiter:

    Controls("A" & i).Value

    So kannst du z.B. die Buttons ansprechen, die den Namen A1, A2, A3, ... tragen.
    Dort musst du einfach den Zähler i erhöhen.

    Mit einer Schleife kannst du dann ganz einfach alle einfärben.

    VB.NET-Quellcode

    1. For i = 1 to 10
    2. Controls("A" & i).BackColor = "green"
    3. Next i
    4. 'Anstatt "A" kannst du dann noch eine Variable bzw. ein Array definieren.
    5. 'So kannst du dann alle Buttons komplett einfärben.
    6. Dim Lagergaenge(4) As String
    7. Lagergaenge(1) = "A"
    8. Lagergaenge(2) = "B"
    9. Lagergaenge(3) = "C"
    10. Lagergaenge(4) = "D"
    11. 'Und jetzt sieht deine Schleife dann so aus:
    12. For i = 1 to Lagergaenge.Count
    13. For a = 1 to 10
    14. Controls(Lagergaenge(i) & a).BackColor = Green
    15. Next a
    16. Next i