Eine Art Zuweisung in Kombination mit Select..?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Eine Art Zuweisung in Kombination mit Select..?

    Hallo Leute,

    ich hab ein Problemchen..
    Ich hab 'ne Textbox die max. 7 zeichen aufnehmen kann (kein problem)

    Jetzt will ich folgendes machen:
    Diese Textbox kann nur folgende Ziffern annehmen: "0","1","2","3","4","5","6"
    Je nach Ziffer erscheint eine Info in einem Label, in diesem Beispiel wird folgendes eingegeben:
    0001000

    Aufeglöst:
    Keine
    Keine
    Keine
    _EINE_
    Keine
    Keine
    Keine

    Nun möchte ich folgendes tun:
    Das erste "Keine" soll nebendran immer "Bemerkung1" stehen haben,
    Das zweite "Keine" soll nebendran immer "Bemerkung2" stehen haben usw...

    Ich hab momentan ein Select Befehl am laufen

    VB.NET-Quellcode

    1. Select Eingabe
    2. Case "0"
    3. label.text += "Keine"
    4. Case "1"
    5. label.text += "_EINE_"
    6. End Select


    ...Um nun auf den Punkt zu kommen:
    Wie bekomme ich es hin, relativ flexibel, die Bemerkungen hochzuzählen? :S
    In dem Select gehts ja wohl kaum, aber.. Ich weiß nichtmal wie ich es beschreiben soll ><
    Ich hoffe ihr versteht was ich meine, wie eine Art "Zuweisung" ...

    Edit:
    Im Grunde kann man es ja auch.. so müsste man es machen(!) in einer For schleife realisieren, oder?
    Also das erste Zeichen (Char) hat "Bemerkung1" und den Wert müsste man überprüfen..?
    "Ich steh grad voll auffem Schlauch."

    Handelt sich hierbei nur um ein Beispiel..

    Danke,
    Drahuverar
    Option Strict On!

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

    Drahuverar schrieb:

    nur um ein Beispiel.
    Wo ist das Problem?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Rede voll am heißen Brei vorbei..
    Also:

    Ich hab ein Problem beim Algorithmus ^^
    Ich müsste ja jeden einzelnen Char überprüfen und dem entsprechend "rausfinden" welcher wert nun hinterlegt ist und im nachhinein "bemerkung" & x hinpfeffern..
    Aber irgendwie bin ich nun auf mein "Select" festgefahren und bekomm nix hin, oder.. ich bin für heute zu dämlich ^^
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    @ErfinderDesRades

    Ja, habe mich auch dämlich ausgedrückt.

    Vielleicht ist es so verständlicher:

    VB.NET-Quellcode

    1. Dim textboxinhalt() as Char = TextboxInhalt.Text.ToCharArray
    2. if textboxinhalt(0) = "0" Then
    3. label1.text += "Keine" & "_Bemerkung1"
    4. else if textboxinhalt(0) = "1" Then
    5. label1.text += "_EINE_" "_Bemerkung1"
    6. else textboxinhalt(0) = "2"
    7. label1.text += "Banane" "_Bemerkung1" Then
    8. End if

    (bei den anderen wäre es "Bemerkung2" usw..

    Das würde ja nun für jedes einzelne Zeichen ablaufen :S

    womit ich dann bei ca. 160 ~ 250 unnötigen Zeilen in meinem Code bin, oder?
    Ich bin der Meinung das man das verkürzen könnte, aber ich weiß gerade nicht wie ich das angenehmer gestalten könnte.
    Vielleicht auch so?

    VB.NET-Quellcode

    1. Dim textboxInhalt() As Char = TextBox_GruppenCode.Text.ToCharArray
    2. For Each zeichen As Char In textboxInhalt
    3. Select zeichen
    4. case CChar("0")
    5. label1.text += "Keine" & "_Bemerkung1"
    6. '...
    7. End If


    Da habe ich aber das Problem das ich hier irgendwie schlecht was zuordnen kann.. ?(
    Option Strict On!
    @Drahuverar:
    Wo ist das Problem? Dafür kannst du doch die Zählervariable einer Schleife benutzen.
    Das Prinzip bleibt dabei ja gleich.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim input As String = "00100"
    5. For i As Integer = 0 To input.Length - 1
    6. Dim number As String = input.Substring(i, 1)
    7. Dim begin As String = If(number = "0", "Keine", "_EINE_")
    8. begin &= "Bemerkung " & (i + 1).ToString()
    9. MessageBox.Show(begin)
    10. Next
    11. End Sub
    12. End Class

    Drahuverar schrieb:

    angenehmer gestalten
    So vielleicht:

    VB.NET-Quellcode

    1. Private dct As New Dictionary(Of String, String)
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. dct.Add("0", "Keine")
    4. dct.Add("1", "_EINE_")
    5. dct.Add("2", "Banane")
    6. End Sub
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. Dim key = Me.textboxinhalt.Text.Substring(0, 1)
    9. If dct.ContainsKey(key) Then
    10. Label1.Text = dct(key) & "_Bemerkung1"
    11. End If
    12. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @LaMiy
    Ja. Daran hab ich auch "gedacht". Ist aber etwas "komplexer"..

    Also folgendes:

    Ich habe einmal einen Code, dieser Code besteht aus 7 Ziffern:
    Die erste Ziffer steht für "Rubin", die zweite Ziffer steht für "Amethyst", die dritte steht für "Saphir", die vierte steht für "Quarz", die fünfte für "Obsidian", die sechste für "Achat" die siebte für "Turmalin"

    Folgend:

    VB.NET-Quellcode

    1. Public Enum Edelsteine
    2. Rubin
    3. Amethyst
    4. Saphir
    5. Quarz
    6. Obsidian
    7. Achat
    8. Turmalin
    9. End Enum


    Dann habe ich noch andere Sachen wie z.B. "Schliffart"

    VB.NET-Quellcode

    1. Public Enum Schliffart
    2. Glattschliff
    3. Facettenschliff
    4. Gemischter Schliff
    5. Polygone
    6. Ellipsenformen
    7. Dreidimensionale Formen
    8. Weitere Schliffformen
    9. End Enum


    Nun entsteht folgendes:
    Die erste Ziffer lautet "0"

    VB.NET-Quellcode

    1. If textboxInhalt(0) = "0" Then
    2. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 0)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    3. ElseIf textboxInhalt(0) = "1" Then
    4. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 1)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    5. ElseIf textboxInhalt(0) = "2" Then
    6. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 2)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    7. ElseIf textboxInhalt(0) = "3" Then
    8. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 3)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    9. ElseIf textboxInhalt(0) = "4" Then
    10. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 4)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    11. ElseIf textboxInhalt(0) = "5" Then
    12. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 5)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    13. ElseIf textboxInhalt(0) = "6" Then
    14. Label4.Text += ([Enum].GetName((GetType(KuehlungsArt)), 6)) & " " & ([Enum].GetName((GetType(Material)), 0)) & vbCrLf
    15. End If


    Dem entsprechend sollte nun für jedes zeichen folgendes passieren:
    Erste Ziffer = 5 -> Achat Glattschliff
    Zweite Ziffer = 4 -> Obsidian Facettenschliff
    ...usw

    Ich glaube das kam nun besser rüber ^^
    Option Strict On!
    ja, viel besser. Einfach erzählen, was man machen will, ohne Textboxen, Chars und Ziffer-Codes.

    Dein Problem ist typisch Datenverarbeitung, du hast verschiedene Stein-Typen, und verschiedene Schliff-Typen, und einen Haufen Steine, denen du jeweils sowohl einen Steintyp, als auch einen Schliff zuordnen musst.
    Womit du 100% bei Datenmodellierung und typisiertem Dataset bist, denn das ist eine m:n - Relation, die du mit Enums und Kram nicht mehr modelliert kriegst.
    Steintyp->Stein<-Schliff

    gugge die relationale GrundIdee
    Da gibts zwar keine Stein- und Schliff-typen, sondern Personen und Berufe, aber die Problematik ist dieselbe: Der Kram muss zugeordnet werden.
    Person->PersonBeruf<-Beruf

    Anschliessend gugge das Datenmodell von vier Views-Videos - ist wieder dasselbe, nur diesmal mit Kategorien, Artikel, Lieferanten
    Kategorie->Artikel<-Lieferant


    Am Ende hast du ein DatagridView mit deine Steine drin, und über Comboboxen, kannst du jedem Stein seinen typ und seinen Schliff verpassen (JoiningView)

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

    Drahuverar schrieb:

    Die erste Ziffer lautet "0"
    Dann ruf eine Prozedur auf, in der ausschließlich der Fall "0" <abgehandelt wird.
    Selbiges für "1", "2" usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!