Vergleich bei Enumerationen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Vergleich bei Enumerationen

    Hi
    ich steh z.Z. iwie aufm Schlauch... Ich versuch, Werte einer Enumeration zu vergleichen:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
    2. Select Case e.State
    3. End Select
    4. End Sub


    Wenn ich jetzt einfach Case DrawItemState.Focus Or DrawItemState.Selected schreib geht das ja nicht... Weiß jemand wie man das ordentlich macht?...

    Gruß
    ~blaze~
    hallo blaze,

    ich gehe davon aus, dass du den inhalt der combobox selbst zeichnen willst.
    normalerweise sollte es mit der abfrage keine probleme geben.

    die hilfeseite dazu wirst du schon aufgesucht haben - vermute ich.

    gruss

    mikeb69
    Hab ich mal überflogen aber nachdem da nichts über die States erklärt wird und das State wenn was markiert wird Selected und Focused sein sollte, dachte ich ich könnte das so wie oben machen aber irgendwie bin ich zu dumm für das ^^ - trotzdem danke ;)

    Ich brauchs nicht unbedingt für die ComboBox, sondern allgemein für Enums. Hab das nur als Beispiel herangezogen.

    Gruß
    ~blaze~
    hallo blaze,

    ich versteh dein problem nicht ganz, hilft dir das vielleicht weiter ?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents t As New Timer
    3. Private r As New Random
    4. Private temp As Status
    5. Private Enum Status
    6. Timer
    7. Form
    8. Ende
    9. End Enum
    10. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. t.Start()
    12. End Sub
    13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    14. Select Case temp
    15. Case Status.Ende
    16. MessageBox.Show("Ende")
    17. Case Status.Form
    18. MessageBox.Show("Form")
    19. Case Status.Timer
    20. MessageBox.Show("Timer")
    21. End Select
    22. End Sub
    23. Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick
    24. temp = r.Next(0, [Enum].GetNames(GetType(Status)).Length)
    25. End Sub
    26. End Class

    gruss

    mikeb69
    Mein Problem liegt eher da:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents t As New Timer
    3. Private r As New Random
    4. Private temp As Status
    5. <Flags()> _
    6. Private Enum Status
    7. None = 0
    8. Timer = 1
    9. Form = 2
    10. Ende = 4
    11. End Enum
    12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. t.Start()
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    16. Select Case temp
    17. Case Status.Ende
    18. MessageBox.Show("Ende")
    19. Case Status.Timer, Status.Form
    20. MessageBox.Show("Timer & Form")
    21. End Select
    22. End Sub
    23. Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick
    24. temp = r.Next(0, 2 ^([Enum].GetNames(GetType(Status)).Length - 1))
    25. End Sub
    26. End Class


    Aber das funktioniert irgendwie nicht...

    Gruß
    ~blaze~
    hallo blaze,

    so ?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents t As New Timer
    3. Private r As New Random
    4. Private temp As Status
    5. <Flags()> _
    6. Private Enum Status
    7. None = 0
    8. Timer = 1
    9. Form = 2
    10. Ende = 4
    11. End Enum
    12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. t.Start()
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    16. Select Case True
    17. Case (temp And Status.Ende) = Status.Ende
    18. MessageBox.Show("Ende")
    19. Case (temp And (Status.Timer Or Status.Form)) = (Status.Timer Or Status.Form)
    20. MessageBox.Show("Timer & Form")
    21. End Select
    22. End Sub
    23. Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick
    24. temp = r.Next(0, 2 ^ ([Enum].GetNames(GetType(Status)).Length - 1))
    25. End Sub
    26. End Class

    gruss

    mikeb69
    hallo blaze,

    das ganze ist nichts anderes als eine logische UND verknüpfung.
    eigentlich recht einfach, in meinem calc.net rechner hab ich sowas auch verwendet.
    ziemlich praktisch.

    schönen sonntag noch

    mikeb69