QR Code erstellen lassen

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von mib1020.

    QR Code erstellen lassen

    Hi zusammen,
    ich habe diesmal ein Problem einen QR code zu erstellen. Ich habe dafür in einer Form eine PictureBox, und einen Textbox. Sobald ich die Textbox was reinschreibe soll schon ein Code generiert werden. Wenn möglich ohne Button wo ich zum erstellen draufklicken muss.
    Ich habe mir auch ins Verzeichnis den "QRCoder" geladen und installiert.
    ist in VB geschrieben in Visual Studio

    Hier mein aktueller Code (oben ist auch als Import der "QRCoder" drin)

    VB.NET-Quellcode

    1. Private Sub QRCodeTextBox_TextChanged(sender As Object, e As EventArgs) Handles QRCodeTextBox.TextChanged
    2. Dim gen As New QRCodeGenerator
    3. Dim data = gen.CreateQrCode(QRCodeTextBox.Text, QRCodeGenerator.ECCLevel.Q)
    4. Dim code As New QRCode(data)
    5. PictureBox1.Image = code.GetGraphic(6)
    6. End Sub


    Anbei habe ich euch auch die Fehlermeldung mitgeschickt. Ich muss dazu sagen ich bin noch ein Anfänger in VB und Programmieren kämpf mich durch die Bücher aber da scheitert es gerade.

    Vielen Dank euch schon mal.

    CodeTags gesetzt ~VaporiZed
    Bilder
    • Fehlermeldung QRCode.PNG

      38,15 kB, 914×94, 49 mal angesehen

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

    @mib1020 Was genau besagt denn die Fehlermeldung?
    Woher hast Du denn den Code?
    ====
    Warum schreibst Du nicht z.B. so was:

    VB.NET-Quellcode

    1. Dim gen As New QRCodeGenerator
    2. Dim data = gen.HeyGeneratorHeyMachDasWasIchWillHey(QRCodeTextBox.Text, QRCodeGenerator.ECCLevel.Q)
    (das ist durchaus ernst gemeint)
    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!
    Die Frage ist wie im Screenshot zu sehen wie kann ich die zum Member von dem QRCodeGenerator machen? Den Code haben hauptsächlich aus einem VB Buch von einem Freund.
    Ich schnall es eben nicht. Es fehlt doch was oder? Oder Tippfehler?

    Weil @RodFromGermany ich weiß nicht genau was du meinst mit dem "Warum schriebst du nicht z.B. so was? Was ist jetzt da der Unterschied die zwei Zeilen sind gleich bis auf dienen Satz?
    @mib1020 Wenn Du eine TextBox auf das GUI ziehst und gedenkst, nur Integer-Zahlen da rein zu schreiben, weiß die TextBox nix davon und bietet Dir nicht automatisch eine Property Value oder gar IntValue an.
    Schreib folgenden Text in eine ansonsten leere Prozedur:

    VB.NET-Quellcode

    1. Private Sub DoIt()
    2. Dim gen As New QRCodeGenerator
    3. Dim data = gen
    4. End Sub
    Dann machst Du nach gen einen Punkt und ein Leerzeichen.
    Was passiert?
    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!
    Ich komm grad nicht mit. Woher kommt denn jetzt die Geschichte mit den Integern?
    Der Code aus Post#1 funktioniert doch, wenn man sich das nuget-Paket QrCoder runterlädt und den entsprechenden Namespace importiert.
    Bilder
    • QrCode.png

      1,73 kB, 126×150, 175 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Dann hat er was vergessen zu tun bzw. gar nicht gewusst, was er tun muss.
    Ich pflege nicht gleich nuget-Pakete zu importieren.
    In diesem Fall wäre nach Punkt-Leerzeichen nix passiert, im Falle "meiner" Textbox wäre Value nicht aufgelistet worden.
    ====
    OK, elementar einfach:
    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!

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

    Ach, das mit der TextBox war ein Gegenbeispiel, wie das mit IntelliSense so läuft. Ok, hatte ich nicht kapiert.
    Dass bei

    VB.NET-Quellcode

    1. Dim gen As New QRCodeGenerator
    2. Dim data = gen.
    nix kommt, würde doch aber auch schon durch eine Fehlermeldung à la "Der Typ 'QRCodeGenerator' ist nicht definiert" quittiert werden, wenn der passende Namespace nicht importiert wurde.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Ich habe mir gerade abgewöhnt, nuget-Pakete zu importieren, die sind gewaltig aufgebläht.
    Wenn man die in *.zip umbenennt, kann man sich die benötigte(n) DLL(s) solo herauskopieren.
    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!
    Also gibt es mehrere Möglichkeiten.

    Dann müsste jetzt quasi der Quelltext so heißen

    VB.NET-Quellcode

    1. Imports QRCoder
    2. Public Class Besucher
    3. Private Sub QRCodeTextBox_TextChanged(sender As Object, e As EventArgs) Handles QRCodeTextBox.TextChanged
    4. Dim gen As New QRCodeGenerator
    5. Dim data = gen.
    6. End Sub
    7. End Class


    und das reicht an Code??? Weil bei mir will er jetzt hinter "gen." eine Bezeichnung haben, das wäre jetzt nur noch die einzige Fehlermeldung. QRCoder Paket wurde schon runtergeladen und installiert. Aber wie gesagt es läuft leider nicht, aber was ist dann falsch?

    mib1020 schrieb:

    und das reicht an Code??? Weil bei mir will er jetzt hinter "gen." eine Bezeichnung haben
    :huh: Das war von mir mit dem gen., um mit Rod eine Sache zu klären. Das ist kein funktionierender Code. Aber:

    VaporiZed schrieb:

    Der Code aus Post#1 funktioniert doch

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja der Code sollte auch funktionieren, allerdings bringt er mir die Fehlermeldung die Angeheftet ist in Post 1. Das ich eben die beiden Sachen zu einem Member machen soll. Was meint er damit und wie mach ich das? Ich probier das morgen nochmal mit einen komplett neuen Ansatz. Vielleicht ist was nicht kompatibel mit dem Programm wo ich diese Funktion hinzufügen möchte. Ich geb morgen hier nochmal bescheid. Aber danke schon mal :) zu mindestens bin ich auf dem Richtigen Weg.

    VB.NET-Quellcode

    1. Imports QRCoder
    2. Private Sub QRCodeTextBox_TextChanged(sender As Object, e As EventArgs) Handles QRCodeTextBox.TextChanged
    3. Dim gen As New QRCodeGenerator
    4. Dim data = gen.CreateQrCode(QRCodeTextBox.Text, QRCodeGenerator.ECCLevel.Q)
    5. Dim code As New QRCode(data)
    6. PictureBox1.Image = code.GetGraphic(6)
    7. End Sub

    Welchen Fehler erzeugt dieser Code denn?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    mib1020 schrieb:

    und das reicht an Code???

    RodFromGermany schrieb:

    Dann machst Du nach gen einen Punkt und ein Leerzeichen.
    Was passiert?

    mib1020 schrieb:

    zu mindestens bin ich auf dem Richtigen Weg.
    Das sehe ich noch nicht.
    Hast Du umgesetzt, was @VaporiZed in Post #5 geschrieben hat?
    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!
    Hallo @VaporiZed

    Erstmal vielen Dank das du dich um mein Problem "kümmerst" bzw es dir anschaust. :)
    @RodFromGermany Ja das was VaporiZed geschrieben hat funktioniert schon das schon aber nur in einem neuen Projekt.

    Also sorry hat bisschen länger gedauert. Also ich habe jetzt den Code in ein komplett neues Projekt geschrieben und da funktioniert er wie du sagst
    in dem Bestehenden Projekt funktioniert er komischerweise nicht.
    Ich habe mal den gesamten Quellcode mit Fehlermeldung Angehängt im Bild. Dazu zu sagen ist das die Textbox zugleich auch mit einer Access Datenbank verknüpft ist, aber Theoretisch nicht ausmachen dürfte.
    Bilder
    • qRCodeProblem.PNG

      517,63 kB, 1.866×1.457, 26 mal angesehen
    @mib1020 Hast Du die QRCoder.dll dem Projekt als Verweis hinzugefügt?
    Und:
    Pack das Instanziieren von QRCodeGenerator aus der Prozedur in die Klasse:

    VB.NET-Quellcode

    1. Private Gen As New QRCodeGenerator

    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!
    Zeig mal bitte mit der Maus in der Zeile Dim gen As New QrCodeGenerator auf das Wort QrCodeGenerator und mach dann einen Screenshot, sobald die Deklaration der Klasse angezeigt wird. Ich habe das Gefühl, dass Du da selber irgendwo eine eigene Klasse mit dem Namen hast, was dazu führt, dass die Klasse aus der DLL quasi überdeckt wird.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi Sorry das ich so spät Antworte aber evtl. könntest du recht haben anbei mal die zwei Screens von dem was du gesagt hast. Da kann ich mich noch nicht wirklich aus. :( Im Falle wie kann man diese Klasse dann wieder löschen das er wieder auf die Ursprüngliche DLL zugreifen kann?
    Bilder
    • QR Generator 1.PNG

      84 kB, 1.533×379, 17 mal angesehen
    • QR Generator 2.PNG

      188,73 kB, 1.715×385, 14 mal angesehen
    @mib1020
    Ich sehe dies wie VaporiZed. Du hast eine eigene Klasse mit dem Namen QrCodeGenerator.
    Überprüfe einmal ob du im Projektmappen-Explorer ein Element mit dem Namen QrCodeGenerator hast,
    oder suche im Ganzen Projekt mit der Suche nach QrCodeGenerator.

    Du kannst das Problem umgehen, indem du z.B. den kompletten Pfad bei Deklaration angibst und den Import entfernst
    Dim gen As New QRCoder.QRCodeGenerator
    oder deine Klasse QrCodeGenerator umbenennst.

    mib1020 schrieb:

    Im Falle wie kann man diese Klasse dann wieder löschen das er wieder auf die Ursprüngliche DLL zugreifen kann?
    Mach ein neues Projekt mit der QRCode.dll in den Verweisen, nimm Deinen eigenen von Dir selbst erstellten Code aus Post #1 und feddich.
    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!

    Neu

    Also ich habe das ganze mit der API von Google gemacht.
    Erstmal habe ich dafür eine Funktion erstellt, die definiert wie der QR Code generiert wird:

    VB.NET-Quellcode

    1. Private Function CreateQRCode(Data As String, Size As Size)
    2. Dim Web As New System.Net.WebClient()
    3. Dim url As String = "http://chart.googleapis.com/chart?chs="
    4. url &= Size.Width.ToString() & "x" & Size.Height.ToString()
    5. url &= "&cht=qr&chl=" & System.Uri.EscapeDataString(Data)
    6. Dim bytes As Byte() = Web.DownloadData(url)
    7. Dim bmp As Bitmap = Nothing
    8. Using mem As New IO.MemoryStream(bytes)
    9. bmp = Bitmap.FromStream(mem)
    10. End Using
    11. Return bmp
    12. End Function

    Und dannach dannach kannst du dann der QR Code durch das aufrufen der Funktion erstellen lassen:

    VB.NET-Quellcode

    1. PictureBox2.Image = CreateQRCode(TextBox1.Text, New Size(256, 256))