Allgemeiner Fehler in GDI+

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Allgemeiner Fehler in GDI+

    Bin jetzt etwas sprachlos.

    Habe auf der Festplattenebene die drei Ordner
    \aaa
    \bbb
    \hardcopy
    angelegt.

    In alle 3 Ordner kann ich an meinem PC problemlos Dateien speichern.
    Habe es an meinem 2. Rechner ebenfalls gemacht: Alles klappt.


    Nun ruft eine Bekannte an, bei der angehängte Fehlermeldung erscheint. Und zwar immer und nur beim Schreiben von Bildern in den Ordner \hardcopy.
    In die anderen Ordner \aaa und \bbb werden txt-Dateien problemlos geschrieben.

    Daher schließe ich ein Rechteproblem aus.

    Aber warum bitte klappt das Erstellen von Bildschirm-Hardcopyies bei meiner Bekannten nicht? Bei mir klappt alles bestens.

    Umgesetzt habe ich es so:

    Dim wib As New Bitmap(breite, hoehe)
    Using wig As Graphics = Graphics.FromImage(wib)
    wig.CopyFromScreen(0, 0, 0, 0, New Size(breite, hoehe))
    End Using
    wib.Save("hardcopy\" + name, System.Drawing.Imaging.ImageFormat.Png)
    Bilder
    • Unbenannt.JPG

      81,26 kB, 626×452, 38 mal angesehen
    @Lammi Willkommen im Forum. :thumbup:
    Zunächst einmal sollte das Save im Using stattfinden:

    VB.NET-Quellcode

    1. Dim wib As New Bitmap(breite, hoehe)
    2. Using wig As Graphics = Graphics.FromImage(wib)
    3. wig.CopyFromScreen(0, 0, 0, 0, New Size(breite, hoehe))
    4. wib.Save("hardcopy\" + name, System.Drawing.Imaging.ImageFormat.Png)
    5. End Using
    Vielleicht genügt das schon.
    Sehen die anderen Save-Codes auch so aus?
    ===========
    Sorry, das sind zwei verschiedene Variablen.
    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!

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

    Der Code setzt voraus, dass sie die EXE auch wirklich im Ordner X:\aaa\bbb abgespeichert hat und dort auch ausführen lässt. Ist die Frage, ob das sichergestellt wurde. Mal bitte testen, z.B. mit:

    VB.NET-Quellcode

    1. If Not IO.Directory.Exists("hardcopy\") Then MessageBox.Show("Die Verzeichnisangabe ist falsch.") : Exit Sub
    2. Dim wib As New Bitmap(breite, hoehe)
    3. Using wig As Graphics = Graphics.FromImage(wib)
    4. wig.CopyFromScreen(0, 0, 0, 0, New Size(breite, hoehe))
    5. End Using
    6. wib.Save("hardcopy\" + name, System.Drawing.Imaging.ImageFormat.Png)

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

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @RodFromGermany
    brachte leider keine Änderung:
    Funktioniert bei mir weiterhin; bei meiner Bekannter kommt immer noch die Fehlerbox

    Die beiden anderen Verzeichnisse werden mittels IO.StreamWriter = New IO.StreamWriter gefüllt und sind .txt-Dateien

    @VaporiZed
    Die Struktur ist wirklich so:
    .exe
    \aaa
    \bbb
    \hardcopy

    Ich nutze das Programm in der Form seit über 2 Jahren und bei mir wird in alle 3 Verzeichnisse geschrieben.
    Bei meiner Bekannten werden Daten in die ersten beiden Verzeichnisse ja auch geschrieben.
    "Nur" das Erstellen der Hardcopy in das dritte Verzeichnis brincht ab. Nur auf Ihrem Rechner. Bei mir läuft es.

    Daher bin ich völlig ratlos.
    Dass es bei Dir funktioniert, stell ich ja auch nicht infrage. Nur wenn es bei Deiner Bekannten nicht funktioniert, muss es relevante Unterschiede geben. Und dazu muss geklärt werden, ob die Voraussetzungen da sind, die bei Dir gegeben sind. Fehlerausschlussverfahren. Nur solange nicht mit dieser einen zusätzlichen Codezeile geklärt ist, ob das angegebene Relativverzeichnis tatsächlich bei ihr erreichbar ist, bleibt eine Unbekannte in der Rechnung erhalten.
    Ein weiterer Punkt könnte sein, dass der Timer bei ihr zu scharf eingestellt ist. Laut Fehlermeldung wird ein Timer verwendet. Wenn das Bild groß und der PC langsam ist, kann es sein, dass die 1. Datei noch erstellt wird, während der 2. Screenshot schon abgespeichert werden soll. Am besten testen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @Lammi Was hast Du, das haben die für Betriebssysteme?
    In welchem Verzeichnis liegt die Exe?
    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!

    Lammi schrieb:

    Windows 8.1
    Das ist etwas blöd, irgendwas war da, weiß aber nicht mehr genau, was;
    (auch wohl) deswegen gibt es hier kein W8.1 mehr, nur W7 und W10.
    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!
    @Steppenpferd

    Das mit dem "Option Strict On" ist leider etwas doof, da bei mir ja alles funktioniert.
    Muss dann jeweils eine schnell angepasste Version für die Bekannte erstellen und ihr zuschicken.

    Bin aber gerade dabei, aus allen Ideen eine Version zu basteln, in der sie dann mehrere Buton zum Klicken / Testen hat.
    Da kommt dann das "Option Strict On" m,it rein - Danke!

    Der vollständige "name" sieht dan z.B. so aus:
    Da es ja bei mir unter W7 und W10 klappt .. evtl. ist der Name zulang?

    dokovw_2019_02_02_19_16_23_ewigespielterminepunkteineuro_um_01_43_02_uhr
    dokovw_2019_02_02_19_16_23_ewigespielterminepunktenurminus_um_01_43_01_uhr

    Bei @RoadFromGermany "klingelt" es ja noch im Hinterkopf. Dir auch vielen Dank!

    Lammi schrieb:

    Das mit dem "Option Strict On" ist leider etwas doof, da bei mir ja alles funktioniert.


    Genau das ist der Knackpunkt. Bei Dir läufts und bei deiner Bekannten sehe ich anhand der Fehlermeldung schon das Du keine Variablentypen konvertierst.
    Jede Wette das da im Code so Dinger wie Dim i as Integer = TextBox1.text stehen.
    Genau solche Fehler verhindert Option Strict On und es bietet Dir sogar lösungsvorschläge an wie im Beispiel grade wäre das Dim i as Integer = cInt(TextBox1.text)
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Cint ist kein gutes Beispiel.
    lieber die net alternativen nutzen als vb6 Kram.

    in dem Falle dann Interger.TryParse
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    @xChRoNiKx
    ja da hast Du natürlich Recht, wenn mans 100% in VB.NET schreiben möchte sollte man Integer.TryParse nutzen um mögliche Fehlerquellen im Vorfeld auszuräumen.

    In seinem Fall scheint es mir aber das er das Programm, das nach seinen angaben bei ihm ja funktioniert, möglichst einfach und schnell auf dem anderen Rechner zum laufen bringen möchte.
    Deshalb halt der Verweis auf die Lösungsvorschläge von Option Strict On .
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)

    Steppenpferd schrieb:

    Bei Dir läufts und bei deiner Bekannten sehe ich anhand der Fehlermeldung schon das Du keine Variablentypen konvertierst.
    Wo siehst Du was, was ich nicht sehe? Wo steht in der Fehlermeldung was darüber, dass mit Option Strict Off gearbeitet wird?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    das wäre ärgerlich - für mich ... da ich bisher ohne "Option Strict On" gearbeitet habe.

    Schade, wie ich jetzt an meinem eigenen Programm sehen mus. Habe mir VB halt selbst beigebracht und da ...

    Kurz und knapp:
    Kann ich leider nicht schnell einbauen, da ich ansonsten sehr viel Stellen ändern möchte.

    Ich möchte ja auch nicht gegen Deine Erfahrung sprechen, aber meine Nase tippt eher auf eine Besonderheit von W8.1
    @Lammi Fang trotzdem mit Strict On an.
    Das kannst Du zunächst in jede Datei als erste Zeile eintragen:

    VB.NET-Quellcode

    1. Option Strict On
    und dann korrigierst Du diese Datei, bis Du durch bist.
    Dann machst Du anständige Einstellungen in Deinem Studion, so dass neue Projekte gleich mit Strict On erstelt werden.
    Ob das tatwächlich an W8.1 liegt, lässt sich ohne Test nicht feststellen.
    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!