none
Eigene Enum oder Structure in Property RRS feed

  • Frage

  • Hallo zusammen,

    ich bastel immer noch an meinm Control. Hier möchte ich gerne eine Property mit Folgenden Werten
    Puplic Property MeineWerte As ......
    Hoch
    Mittel
    Tief

    Nun habe ich das über einen Enum und einer Structure versucht.
    Ich bekomme aber in der Property nichts angezeigt.
    Die Structure

    Declare Structure Name of Week Day
    
     Structure UpAndDown
    
      Dim Up As String
    
      Dim Down As String
    
     End Structure
    
      Declare Variable
    
     Dim WD As UpAndDown
    
      Fill Structure
    
     Private Sub SetStructureValue()
    
      German(Entrys)
    
      With WD
    
       .Up = "Hoch"
    
       .Mid = "Mittel"
    
       .Down = "Tief"
    
      End With
    
     End Sub
    
    
    Ich möchte eine Auswahl mit der ich das realisieren kann !
    geht das ?
    wie bekomme ich da hin ?
    vielen lieben dank
    bernd
    Mittwoch, 21. April 2010 15:29

Antworten

  • Die Frage ist ja, was Du erreichen möchtest, mit diesen Texten. Wenn Sie zur Steuerung des Programms notwendig sind und nur bestimmte zulässig sein sollen, solltest Du IMO beim Enum Ansatz bleiben. Wenn Du eine Textdarstellung für den weiteren Ablauf benötigst, kannst Du entweder den Enum sprechend beschreiben oder übersetzt die Enum Werte zu entsprechenden Zeichenfolgen:

    Public Enum Directions
     Up
     Down
     Left
     Right
    End Enum
    
    Private Function GetTextForEnum(ByVal direction As Directions)
     Select Case direction
      Case Directions.Up
    	 Return "Aufwärts"
      Case Directions.Down
    	 Return "Abwärts"
    	 ...
    End Enum

    Gibt noch andere Möglichkeiten, wie öffentliche Konstanten oder ReadOnly Felder. Aber ich denke Dir geht es mehr um die entsprechende Unterstützung via IntelliSense bzw. dem Eigenschaftenfenster.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 06:31
    Moderator
  • Hallo Bernd,

    die Werte werden über einen TypeConverter von einer Zeichenfolge in den
    internen Typ  umgesetzt. Im Falle von Enum ist das der EnumConverter .
    Dabei werden die Werte anhand von Enum.GetNames ermittelt und angezeigt.

    In den meisten Fällen sollte das reichen. Nur wenn man intern z. B.
    mit englischen Bezeichnungen arbeitet und an der Oberfläche lokalisierte
    (deutsch u. a. ) anzeigen will, müsste man einen eigenen Konverter schreiben.

    Und wenn ich mir Deine Bezeichnungen so anschaue, könnte VerticalAlignment passen.

    Gruß Elmar

    Donnerstag, 22. April 2010 07:25
    Beantworter
  • Hallo Bernd,

    Du kannst auch nur Enum Werte zur Auswahl vorgeben. Mit Zeichenfolgen funktioniert das nicht.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 05:31
    Moderator
  • Hallo Bernd,

    ich sehe hier keinen Grund, der gegen einen reinen Enum sprechen würde. Mit Zeichenfolgen/Text musst Du da nicht rumhantieren.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 16:21
    Moderator

Alle Antworten

  • Hi,

    wenn ich dich jetzt richtig verstanden haben, dann willst du eine Property haben, wo du nur Hoch, Mittel, Tief auswählen kannst. Wenn ja, dann so:

    Public Class testenum
       Enum Werte
          Hoch
          Tief
          Mittel
       End Enum
    
       Dim abcd As Werte
    
       Public Property XY() As Werte
          Get
             Return abcd
          End Get
          Set(ByVal value As Werte)
             abcd = value
          End Set
       End Property
    
    End Class

    Gruß

    martinwy

    Mittwoch, 21. April 2010 16:31
  •  

    Nein: ich habe mir meine Übungen nochmals angesehen. Es werden die Enum Werte angezeigt nicht die Texte !
    Ich wollte dem User aber Texte bereitstellen.
    nochmals vielen dank
    bernd

    Mittwoch, 21. April 2010 20:16
  • Hallo Bernd,

    Du kannst auch nur Enum Werte zur Auswahl vorgeben. Mit Zeichenfolgen funktioniert das nicht.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 05:31
    Moderator
  • Ok,

    dann werde ich die benötigten Property's so umformulieren das der Programmierer verständlich mitgeteilt bekommt was er zu tun hat.

    vielen lieben dank

    Bernd

    Donnerstag, 22. April 2010 05:37
  • Die Frage ist ja, was Du erreichen möchtest, mit diesen Texten. Wenn Sie zur Steuerung des Programms notwendig sind und nur bestimmte zulässig sein sollen, solltest Du IMO beim Enum Ansatz bleiben. Wenn Du eine Textdarstellung für den weiteren Ablauf benötigst, kannst Du entweder den Enum sprechend beschreiben oder übersetzt die Enum Werte zu entsprechenden Zeichenfolgen:

    Public Enum Directions
     Up
     Down
     Left
     Right
    End Enum
    
    Private Function GetTextForEnum(ByVal direction As Directions)
     Select Case direction
      Case Directions.Up
    	 Return "Aufwärts"
      Case Directions.Down
    	 Return "Abwärts"
    	 ...
    End Enum

    Gibt noch andere Möglichkeiten, wie öffentliche Konstanten oder ReadOnly Felder. Aber ich denke Dir geht es mehr um die entsprechende Unterstützung via IntelliSense bzw. dem Eigenschaftenfenster.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 06:31
    Moderator
  • Hallo Bernd,

    die Werte werden über einen TypeConverter von einer Zeichenfolge in den
    internen Typ  umgesetzt. Im Falle von Enum ist das der EnumConverter .
    Dabei werden die Werte anhand von Enum.GetNames ermittelt und angezeigt.

    In den meisten Fällen sollte das reichen. Nur wenn man intern z. B.
    mit englischen Bezeichnungen arbeitet und an der Oberfläche lokalisierte
    (deutsch u. a. ) anzeigen will, müsste man einen eigenen Konverter schreiben.

    Und wenn ich mir Deine Bezeichnungen so anschaue, könnte VerticalAlignment passen.

    Gruß Elmar

    Donnerstag, 22. April 2010 07:25
    Beantworter
  • Also Konkret,

    Ich bastel an einem Control welches eigentlich mehrere sind.
    Nun möchte ich umschalten können zwischen
    Uhr
    Tachometer
    Drehzalmesser

    Innerhalb dieser Kategorien kann dann nochmals unterschieden werden.
    Damit ich aber nicht ständig Property mit True und False habe und diese mühselig gegeneinander verriegeln/sperren muss,dacht ich mir
    halt die obige Lösung aus.

    Wie gesagt es soll in den Eigenschaften einfach Text erscheinen.

    Ok ich lese mich mal durch und versuche das hinzubekommen.

    vielen lieben dank

    bernd

    Donnerstag, 22. April 2010 15:29
  • Hallo Bernd,

    ich sehe hier keinen Grund, der gegen einen reinen Enum sprechen würde. Mit Zeichenfolgen/Text musst Du da nicht rumhantieren.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 22. April 2010 16:21
    Moderator
  • genau so ähnlich dachte ich auch.
    wenn ich die Property so eindeutig mache und im BeschreibungsText darauf hinweise, sollte es eigentlich klar sein.

    Aber trotzdem schaue ich mir alle von euch genannten Hinweise genauer an.


    danke euch wie immer
    Bernd
    Donnerstag, 22. April 2010 17:35