Automatisch Kennzeichen generieren

  • VB.NET

Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Automatisch Kennzeichen generieren

    Hi Leute,

    ich möchte gern bei mein Spiel die Funktion einbauen wenn man ein Fahrzeug kauft soll dieses Fahrzeug ein eigenes Kennzeichen erhalten (aufsteigend von 0001). Soweit hab ich es ja schon hin bekommen, dass er Kennzeichen in meiner Karte anzeigt. Bekomme es jedoch nicht hin das er mir für jedes Fahrzeug ein neues Kennzeichen generiert.

    So sollte es mal aussehen:
    Fahrzeug
    Kennzeichen
    Standort
    TÜV
    Inspektion
    Sprinter
    B - 0001
    Berlin
    01.01.2021
    01.01.2021

    So hab ich das Kennzeichen Label gemacht "B - " & Kennzeichenstring

    Ich dachte mir ich kann es vieleicht als ein Event machen wie meine Aufträge, ein FlowPanel wo innen eine derartige Tabelle erzeugt wird.

    Das kam bis jetzt nur raus :(

    VB.NET-Quellcode

    1. Public zahlen As Label
    2. Dim fp2 As New FlowLayoutPanel
    3. Public Sub New(timername As String, flowPanel As FlowLayoutPanel)
    4. CreateCluster(timername, flowPanel)
    5. End Sub
    6. Public Sub CreateCluster(timername As String, flowPanel As FlowLayoutPanel)
    7. 'Dim fp2 As New FlowLayoutPanel
    8. fp2.FlowDirection = FlowDirection.TopDown
    9. fp2.Controls.Add(New Label() With {.Text = timername, .Width = 250})
    10. flowPanel.Controls.Add(fp2)
    11. End Sub

    VBHunter schrieb:

    ür jedes Fahrzeug ein neues Kennzeichen generiert.
    Wie sollen die denn aussehen:
    B-0001
    M-0002
    HH-0003
    oder
    B-0001
    M-0001
    HH-0001
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Na ja eigentlich genau so wie du es geschrieben hast.

    Ich klicke jetzt auf Auto Kauf, dann weil ich Firmensitz in Berlin bei start ausgewählt hab haben ja alle meine Fahrzeuge B - XY ....Also immer fortlaufende zahlen 4stellig. (Der Sitz wird bei Spielstart ausgewählt und funktioniert schon)

    Edit:
    Also er soll prüfen welche zahlen noch frei sind kann ja sein dass er 0003 verkauft hat.

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

    VBHunter schrieb:

    Na ja eigentlich genau so wie du es geschrieben hast.
    OMG ?(
    Vor dem

    RodFromGermany schrieb:

    oder
    oder
    Nach dem

    RodFromGermany schrieb:

    oder
    :?:
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany So wie ich das verstehe gibt es immer nur einen Firmensitz.
    Also kein Wechsel zwischen B und M sondern nur B oder M ( oder wo auch immer der Firmensitz ist)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Schamash schrieb:

    So wie ich das verstehe gibt es immer nur einen Firmensitz.
    Da hat ere sich leider nicht festgelegt.
    @VBHunter Fang an bei 1 => B - 0001 zu zählen und teste das Ergebnis aud Vorhanden. Wenn ja - nächsten Wert testen, wenn nein - nächste Nummer gefunden.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Sorry das war ja ein entweder oder :D .... tut mir leid hatte nur schnell in der Pause geantwortet

    ähm ja das erste haut hin. Es gibt nur ein Firmensitz zur auswahl wo man startet.
    Ich habe jetzt die Einstellungen wähle Spielername etc. und wähle mein Firmensitz Berlin also ist ja fest im Label B - ..... er soll jetzt bei jeden Autokauf 0001 ....0002 hinzufügen wobei er auch von vorne beginnen kann fals die Zahl wieder Verfügbar ist.

    achso du meinst einfach eine If abfrage mit gleich oder kleiner als ?

    Wie ginge es das er die oberen sachen in die Tabelle einfügt und automatisch die Tabelle erweitert ?

    Edit:
    Mal vereinfacht die frage, wie bekomme ich es hin das er bei der Tabelle im linken Feld das ... Im zweiten Feld das ... Usw. Macht ... Wie bekommt man die ID raus von jeder Celle

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

    Tut mir leid aber ich weiß nicht wie ich es besser erklären kann .... Ich meine die einzelnen Felder in einer Tabelle z.b. Spalte eins Zeile eins ... Haben die IDs oder so das ich sagen kann new Label mit Kennzeichen.string in die und die ID der Tabelle?
    @VBHunter Hatten wir doch gerade.

    RodFromGermany schrieb:

    Fang an bei 1 => B - 0001 zu zählen und teste das Ergebnis aud Vorhanden. Wenn ja - nächsten Wert testen, wenn nein - nächste Nummer gefunden.
    Mach Dir eine Funktion GetNextNumber(), die flöht die vorhandenen durch znd gibt nie nächste freie zurück.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @VBHunter: Ist die Tabelle, die Du in Post#1 gezeigt hast, nur Anschauungsmaterial oder soll die in irgendeiner Form tatsächlich so in Deinem Programm auftauchen? Also irgendeine sichtbare Tabelle. Im einfachsten Fall können Deine Daten ja in einer passenden Klasse Platz finden, ganz ohne Tabelle. Klar, man kann die Daten später zur Anschauung nochmal in einer Tabelle darstellen. Aber die Rohdaten müssen in keiner Tabelle abgespeichert werden. Eine weitere Möglichkeit, bei der dann auch eine Art Tabelle schon zum Designzeitpunkt auftaucht, wäre ein typisiertes DataSet.
    Nur habe ich ein wenig das Gefühl, dass Du Dich gedanklich sehr an eine echte Tabelle klammerst, die aber für das korrekte Laufen des Programms gar nicht gebraucht wird.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

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

    Ich glaub ich werde falsch verstanden aber du @VaporiZed bist schon aufn richtigen weg.
    Genau das meine ich eine sichtbare Tabelle....

    Ich habe eine Tabelle (Sichtbar) mit 1er Zeile und 5 Spalten. Darunter will ich halt das eine neue Zeile hinzugefügt wird beim Autokauf wo dann diese Felder ausgefüllt sind

    So soll es aussehen wenn ich kein Fahrzeug habe:

    Fahrzeug
    Kennzeichen
    Standort
    TÜV
    Inspektion
    Du hast leider kein Fahrzeug !






    und so soll es aussehen wenn ich per Klick ein Fahrzeug gekauft habe:

    Fahrzeug
    Kennzeichen
    Standort
    TÜV
    Inspektion
    Sprinter
    B - 0001
    Berlin
    01.01.2020
    01.01.2020


    Die Tabelle soll sichtbar sein ..... und da ist ja die Frage wie bekomme ich es hin, dass ich per Klick eine neue Zeile hinzufüge wo je das Label mit den angaben gefüllt wird und es später auch Speicherbar ist.

    So sieht meine Speicherung aus:

    VB.NET-Quellcode

    1. Dim sfd As New SaveFileDialog
    2. If sfd.ShowDialog = Windows.Forms.DialogResult.OK Then
    3. My.Computer.FileSystem.WriteAllText(sfd.FileName, Label_nFirma.Text & ";" & Label_Spielername.Text & ";" & Label_pKonto.Text & ";" & Label_fKonto.Text & ";" & Label_fWert.Text, False)
    4. End If

    Dein Vorhaben ist relativ einfach umzusetzen. Schau dir dazu die Tutorials von @ErfinderDesRades an. Am besten das Daten laden, speichern einfache Variante (sorry, kann irgendwie keinen link am iPhone einfügen).
    Deine Nummernschild vergabe ist da etwas komplizierter, vor allem weil du autos zurück geben willst.
    Nimm @RodFromGermanys rat an und baue dir da eine eigene Funktion.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    ist da etwas komplizierter
    Eigentlich nicht.
    Unter der Voraussetzung, dass die Schilder in der Liste sortiert sind, ist der letzte Index automatisch der gfrößte Wert.
    Nehmen wir an, es gibt n Einträge und der letzte Eintrag sei B - 0123.
    Aus diesem generierst Du den letzten zugewiesenen Wert: 123.
    Nun machst Du eine Funktion etwa so:

    VB.NET-Quellcode

    1. ' MAX_WERT ist in diesem Beispiel = 123
    2. Function GetNextNumber(MAX_WERT As Integer) As Integer
    3. If DATENBANK.Count = MAX_WERT Then
    4. Return MAX_WERT + 1
    5. End If
    6. For i = 1 To MAX_WERT
    7. Dim kennzeichen = String.Format("B - {0:0000}", i)
    8. If Not DATENBANK.Exists(kennzeichen) Then
    9. Return i
    10. End If
    11. Next
    12. Return MAX_WERT + 1
    13. End Function
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Hallo @RodFromGermany ja, das ist schon richtig.
    So wie ich den TE verstehe, will er ja auch Kennzeichen wieder zurück geben.
    Wenn 123 der höchste wert ist und die Liste ist sortiert, gibt er immer 124 zurück. Aber was wenn das Kennzeichen 56 zurück gegeben wird, dann ist der Max-Wert trotzdem noch 123... Das meinte ich mit etwas komplizierter.
    Eventuell müsste man eine Klasse Kennzeichen machen und alle Kennzeichen in einer List(of Kennzeichen) führen und dort dann hinzufügen und weg nehmen.
    In der Kennzeichen Liste müsste man dann schauen welche Nummer frei ist und diese dem neuen Fahrzeug zuweisen...
    Oder man geht von vornherein davon aus das Kennzeichen nur 1 mal vergeben werden, egal ob das Fahrzeug zurück gegeben wird oder nicht...
    "Hier könnte Ihre Werbung stehen..."
    Richtig meine Vorstellung ist das die Kennzeichen Grenze bei 9999 liegt deshalb 4 Ziffern jedoch kann man dazwischen z.b. die 5522 verkaufen und das Kennzeichen ist wieder frei. Quasi muss er immer bei Kauf abfragen welches Kennzeichen noch verfügbar ist.

    Das mit der Tabelle habe ich soweit lösen können er fügt jetzt per Klick die Labels ein
    4 je Zeile und erweitert danach die Tabelle automatisch.

    Glaube war dieser Code
    Bin Grad unterwegs und sehe es nicht

    TabelleXY.control.add(new Label () with .Text = hierderstring
    Aber warum umständlich eine Tabelle mit Labels generieren, wenn es bereits Tabellen-CEs gibt? Das DataGridView kann alles, was Du bisher erwähnt hast und kann außerdem designtechnisch sehr flexiblel agieren. Das kann richtig schön aussehen (falls das eine Anforderung sein sollte). Und natives DataBinding ist auch möglich. Dann musst Du Dich nur darum kümmern, dass die Daten richtig strukturiert vorliegen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    MichaHo schrieb:

    Das meinte ich mit etwas komplizierter.
    Kann ich nicht nachvollziehen.
    @VaporiZed hat den Weg gezeigt.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Endlich - post#16 - hat vbhunter es geschafft, zumindest ein Teilproblem so zu formulieren, dass ich es verstehen konnte:
    Es geht darum Nummern aus einem Nummernkreis einmalig zu vergeben, und auch vergebene Nummern wieder "zurücknehmen" zu können.

    Ist offsichtlich ein Teilproblem (und ein interessantes!), weil hat mit Tabellen, und auch mit mit WirrSprech wie: "Haben die IDs oder so das ich sagen kann new Label mit Kennzeichen.string in die und die ID der Tabelle?" gar nichts zu tun.

    Eine NummernKreis-Klasse muss her, denn es muss mehrere Nummernkreise geben, ein für Bremen, ein für Köln etc.

    ErfinderDesRades schrieb:

    ein für Bremen, ein für Köln etc.
    Berlin, München und Hamburg sind mir schon abgeschmettert worden, siehe Post #2.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!