VB Key Generator?

HORNSWOGGLE

C++ Beginner
Hallo,

Wie kann ich in Basic.NET einen Key Generator machen?:confused:,

Ich hab hier ein Beispiel:

VB 6 Code:

Code:
Private Function CreateKey(ByVal nLen As Integer) As String
    ' zufälligen Key aus Großbuchstaben und
    ' Zahlen ermitteln

    Dim i As Integer
    Dim nValue As Integer
    Dim sKey As String

    For i = 1 To nLen
        Randomize(-Timer)
        nValue = Int(1000 * Rnd)
        If (nValue Mod 10 = 0) Or (nValue Mod 5 = 0) Or (nValue Mod 3 = 0) Then
            ' Zahl
            Randomize(-Timer)
            Do
                nValue = Int(8 * Rnd + 1)
            Loop Until nValue >= 1 And nValue <= 9
            sKey = sKey & Chr$(48 + nValue)

        Else
            ' Buchstabe
            Randomize(-Timer)
            Do
                nValue = Int(26 * Rnd)
            Loop Until nValue >= 1 And nValue <= 26 And nValue <> 9 And nValue <> 15
            sKey = sKey & Chr$(64 + nValue)
        End If
    Next i

    CreateKey = sKey
End Function

Kann mir jemand diesen Code so umsetzen das der Key per Button generiert wird und auf einem Label angezeigt wird?

Am besten währe ein Beispiel Projekt das ich mit Visual Studio bearbeiten kann.

Ich verwende Visual Studio 2008;-).

Anhang:(!)

http://www.vbarchiv.net/archiv/tipp_826.html
 
Hi

Was hällst du davon, wenn du das ganze selbst machst und genaue Fragen stellst, wo dein Problem liegt. Du willst dabei ja was lernen ;)
 
Du hast doch bereits ein vollständiges Codebeispiel für VB6, schau es dir an und pass es an VB.NET. Wahrscheinlich ist es sogar 1:1 verwendbar.

Und noch eines: Wie Niggo bereits sagte, du lernst mehr, wenn du es selber nach VB.NET übersetzt. Dieses Forum ist ja nicht dafür da vollständige Methoden oder Programme im Auftrag zu entwickeln.

Vielleicht sind folgende Worte etwas zu hart: Man sollte, wenn man programmieren will, vor allem, wenn man in die Spielebranche einsteigen möchte (ich habe bereits andere Threads von dir gelesen), ein wenig Eigeninitiative und vor allem Gehirnschmalz in die Sache investieren. Ein komplettes Programmbeispiel zu verstehen und in eine andere Sprache zu konvertieren gehört da zu den leichtesten Aufgaben!
 
Ok hab das jetzt mal so gemacht:

In VB 2008 oder 05 .NET halt:(!)

Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' zufälligen Key aus Großbuchstaben und
        ' Zahlen ermitteln

        Dim i As Integer
        Dim nValue As Integer
        Dim sKey As String

        For i = 1 To nValue
            Randomize(Timer1.ToString)
            nValue = Int(1000 * Rnd())
            If (nValue Mod 10 = 0) Or (nValue Mod 5 = 0) Or (nValue Mod 3 = 0) Then
                ' Zahl
                Randomize(Timer1.ToString)
                Do
                    nValue = Int(8 * Rnd() + 1)
                Loop Until nValue >= 1 And nValue <= 9
                sKey = sKey & Chr(48 + nValue)

            Else
                ' Buchstabe
                Randomize(Timer1.ToString)
                Do
                    nValue = Int(26 * Rnd())
                Loop Until nValue >= 1 And nValue <= 26 And nValue <> 9 And nValue <> 15
                sKey = sKey & Chr(64 + nValue)
            End If
        Next i

        sKey = label1.Text
    End Sub
End Class


Ich hab das mal mit nem Label versehen, sKey ist ja als string deklariert ( siehe oben),also hab ich da einfach sKey = label1.Text eingecodet,aber er zeigt keinen Generierten Code an?:confused:


Was stimmt nicht?:confused:
 
Es soll doch in label1.Text der Wert von sKey anzeigt werden, oder?

Mit sKey = label1.Text weißt du jedoch den Wert von label1.Text der Variable sKey zu und überschreibst damit den eigentlichen Wert mit dem aus dem Label.

Richtig muss es lauten: label1.Text = sKey
 
Zuletzt bearbeitet:
Du hast es umgedreht,ich glaub nicht das das eine rolle soielt wie rum diese Variable ist oder?:confused:

Habs aber versucht,geht aber immernoch nicht,hab aber eine Null verweisung gefunden bei diesem sKey:
 

Anhänge

  • skey.JPG
    skey.JPG
    6,3 KB · Aufrufe: 76
Natürlich spiel es eine Rolle in welcher Reihenfolge man das schreibt. Ich habe es in der vorherigen Antwort erklärt, was deine Variante und was meine Variante macht.

NOCHMAL:

Deine Variante: Der erzeugte Key wird mit dem Text, der sich bereits im Label befindet überschrieben, am Label ändert sich NICHTS

Meine (richtige) Variante: Der erzeugte Key wird in das Label geschrieben und es wird der Key angezeigt.

Edit:

Du bist ja ein Spezi, hast du das mal gedebuggt?
1. sKey wird nicht initialsiert und erhält somit den Wert Nothing
2. For i = 1 To nValue, ist ja ok, aber du solltest nValue auf auf einen Wert > 0 setzen, nValue gibt übrigens an aus wievielen Zeichen sKey bestehen soll

Fazit: Die Schleife wird nicht durchlaufen und du versuchts Label1.Text = Nothing und das geht nicht.

Also:
1. sKey zumindest mit String.Empty oder "" initialisieren
2. Was machst du da mit Randomize(Timer1.ToString)?! Randomize erwartet einen Double-Wert. Ist dir klar, was du bewirkst, wenn du Randomize einen Wert übergibst? Mach es lieber so: Randomize(Convert.ToDouble(DateTime.Now.Ticks))

UND... das Programm arbeitet einwandfrei!

Edit (die Zweite)
Wahnsinn... falls du den ersten Teil schon gelesen hast, hier ein weiterer Edit.

Ich lese gerade, dass Randomize(Convert.ToDouble(DateTime.Now.Ticks)) für VB.NET nicht mehr nötig ist. Wenn keine Argumente angegeben sind verwendet Radomize für die Initialisierung automatisch den Systemzeitgeber. Cool!
Nur wenn du durch die Rnd-Methode immer wieder die gleichen "Zufallszahlen" erzeugen lassen willst, musst du einen konstanten Wert an Randomize übergeben.
 
Zuletzt bearbeitet:
Ok, habs jetzt die Fehler behoben,bekomm auch was angezeigt und zwar True?:confused:

Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' zufälligen Key aus Großbuchstaben und
        ' Zahlen ermitteln

        Dim i As Integer
        Dim nValue As Integer
        Dim sKey As String
       

        For i = 1 To 0
            Randomize()
            nValue = Int(1000 * Rnd())
            If (nValue Mod 10 = 0) Or (nValue Mod 5 = 0) Or (nValue Mod 3 = 0) Then
                ' Zahl
                Randomize(Convert.ToDouble(DateTime.Now.Ticks))
                Do
                    nValue = Int(8 * Rnd() + 1)
                Loop Until nValue >= 1 And nValue <= 9
                sKey = sKey & Chr(48 + nValue)

            Else
                ' Buchstabe
                Randomize(Convert.ToDouble(DateTime.Now.Ticks))
                Do
                    nValue = Int(26 * Rnd())
                Loop Until nValue >= 1 And nValue <= 26 And nValue <> 9 And nValue <> 15
                sKey = sKey & Chr(64 + nValue)
            End If
        Next i


        label1.Text = sKey = String.Empty

       


    End Sub
End Class

Doch der Key? Der wird immer noch nicht angezeigt!:mad:

Was stimmt nicht hier:confused:
 
Zurück