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...
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.