Visual Basic Hilfe

Pollution

Komplett-PC-Aufrüster(in)
Hallo Forum,
ich mal wieder am Start :D
naja, ich hab ne Checkbox (Bild_001.jpg im Anhang)
und ich hab folgenden Code, damit, wenn man drauf klickt, dieses Fenster beim nächsten Start nicht mehr angezeigt wird. (Code = Bild_002.jpg)
Allerdings bekomm ich folgende Fehlermeldung, immer wenn nachdem ich die checkbox getickt und das programm erneut gestartet habe. (Bild_003.jpg im Anhang)

Wenn mir da jemand helfen könnte, wäre das echt klasse, denn langsam verzweifle ich, nachdem selbst mein Informatik-Lehrer mir nicht mehr helfen konnte nach 1 1/2h analyse de codes ^^

Danke und Grüße ausm Pott :)
 

Anhänge

  • Bild_001.jpg
    Bild_001.jpg
    4,3 KB · Aufrufe: 107
  • Bild_002.jpg
    Bild_002.jpg
    107,7 KB · Aufrufe: 74
  • Bild_003.jpg
    Bild_003.jpg
    35,3 KB · Aufrufe: 71
Ich hab mich nie mit VB beschäftigt, aber vielleicht statt Private Sub, Public Sub?
Immerhin wird die Checkfunktion ja von außen aufgerufen, und wenns Private ist, geht das natürlich nicht.
Deshalb wahrscheinlich die Fehlermeldung
 
Das Problem ist, dass du versuchst, die Form mit Close() zu schließen, bevor sie vollständig geladen wurde, darauf weist auch die Ausnahme hin, wenn du den Code per Einzelschrittausführung durchgehst kommt die Ausnahme 100%ig in der Me.Close()-Anweisung in der Methode WhatsNew_Load(). Das Problem ist hier einfach eine unsaubere Programmstruktur. Wie man dein Problem besser lösen könnte kann ich dir aber nur sicher sagen, wenn ich ein bisschen mehr über das Programm weiß. Wenn du willst, kannst du mir die Projektmappe mal zuschicken und ich schau es mir an.
Die sinnvollste Variante ist es wahrscheinlich, die Existenz der Datei "donotdelete.dat" zu überprüfen bevor die Form geladen wird, also im Aufrufer von WhatsNew. Wenn WhatsNew die MainForm ist, also die Form, die beim Starten des Programmes als erste geladen wird, musst du eine neue Klasse mit Sub_Main() erstellen und dort eine Abfrage nach der Existenz der Datei implementieren, anschließend in den Projekteinstellungen Main() als Startelement festlegen. Wenn WhatsNew von einer anderen Form aus aufgerufen wird, musst du in der aufrufenden Form die Überprüfung für die Dateiexistenz implementieren.

Dass das ein Informatiklehrer auch nach 1 1/2 Stunden Codeanalyse nicht herausbekommt bestätigt nur mal wieder meine Meinung über Informatiklehrer...:schief:

Am Private Sub liegt es übrigens nicht. Private Member sind innerhalb der gesamten Klasse gültig.

Solche Kurzen Prozeduren wie exist() und dontexist() in eigene Methoden auszulagern ist übrigens wenig sinnvoll, wenn sie auch nur einmal aufgerufen werden. Das schmälert nur unnötig (auch wenn nur minimal) die Performance.

Und nochwas...in der CheckedChanged-Methode musst du auch eine If-Abfrage einfügen um zu überprüfen welchen Status die Checkbox denn nun hat. Und die File.Create()-Anweisung gehört in einen Try-Catch-Block. Sonst schmeißt er dir die nächste Ausnahme wenn du versuchst die Datei zu erstellen obwohl sie eventuell schon besteht.

Noch ein weiterer Hinweis: Dateien sollten nicht im Anwendungsverzeichnis erstellt werden. Wenn dein Programm im Programme-Ordner installiert wird braucht es dafür Administrator-Berechtigungen. Besser ist es, die Datei im AppData\Roaming\DeineAnwendung-Verzeichnis im Benutzer-Ordner zu erstellen, dann kommt dein Programm auch ohne Admin-Berechtigung aus. Auf den AppData-Ordner kannst du über My.Application.SpecialFolders zugreifen.
 
Zuletzt bearbeitet:
Das Problem ist da wohl exist()= wenn es die dat-Datei nicht gibt, soll das Fester geöffnet werden=alles klar. Im zweiten Durchgang gibt es die Datei und eigentlich soll das Fenster nicht gezeigt werden, im Programm steht aber Me.Close() (Fenster schließen??). Die Fehlermeldung kann man auch ganz frei mit "Fenster die nicht geöffnet sind kann ich auch nicht schließen" übersetzen.
 
ich probiers mal mit public sub :)
ich starte über ein zweites
wenn ich über visual studio gehe, dann kommt der fehler nicht
 
Zurück