Formen "Hiden"

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von vbmatze.

    Formen "Hiden"

    Hallo liebe vbcomunity,

    Ich habe hier etwas, was nicht so funktioniert wie ich es gerne hätte. Vielleicht hat jemand ne idee wie das lösen kann.

    Also ich habe in den Projekteinstellunge vorgegeben, mit welcher Form mein Programm startet. Wenn diese Form dann geladen wird, soll geprüft werden ob eine Datei vorhanden ist. Ist Sie nicht vorhanden, soll eine bestimmte andere Form geladen werden und die erste Form soll verschwinden. Die Sache an sich funktioniert auch, nur startet er bei mir beide Formen und blendet die andere nicht aus. Wie kann ich das ändern?

    Hier mal ein Auszug aus meinem Code:

    VB.NET-Quellcode

    1. 'Prüfung, ob es sich um eine Erstnutzung handelt
    2. '-----------------------------------------------
    3. Private Sub LoginForm1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. If Not My.Computer.FileSystem.FileExists("KW.Dat") = True Then
    5. Form2.Show()
    6. Me.Hide()
    7. End If
    8. End Sub


    Vielen Dank für Eure Hilfe schon einmal im Voraus
    vbmatze
    solange die datei im selben ordner liegt wie das programm muss man keinen pfad angeben

    zur frage: du hast das hiden im form load, also wenn die form geladen ist. solange sie noch lädt kannst du sie nicht verstecken. pack den code ins form_shown

    Gelöschter Benutzer schrieb:

    solange die datei im selben ordner liegt wie das programm muss man keinen pfad angeben

    Mehr dazu hier:
    en.wikipedia.org/wiki/Path_(computing)
    de.wikipedia.org/wiki/Pfadname
    Absolute und relative Pfade.
    Von meinem iPhone gesendet

    VB.NET-Quellcode

    1. 'Prüfung, ob es sich um eine Erstnutzung handelt
    2. '-----------------------------------------------


    Lese ich gerade.
    Das kannst du über My.Settings regeln. Mach' einen Boolean rein. Den kannst du dann überprüfen. Wenn er False ist, dann ist es die erstnutzung und dann machst du ihn True.
    Von meinem iPhone gesendet
    Wieso so umständlich??

    VB.NET-Quellcode

    1. If Not My.Computer.FileSystem.FileExists("C:\...\KW.Dat") = True Then


    Statt prüfen, ob es nicht True ist, kannst du auch einfach prüfen, on es False ist:

    VB.NET-Quellcode

    1. If My.Computer.FileSystem.FileExists("C:\...\KW.Dat") = False Then


    Wenn nicht könnte auch helfen:

    VB.NET-Quellcode

    1. If IO.File.Exists("C:\...") = False Then

    possible31776 schrieb:

    Wieso so umständlich??
    FileExists() und IO.File.Exists() liefern beide Boolean zurück, also:

    VB.NET-Quellcode

    1. If IO.File.Exists(...) Then
    2. ' ...
    3. End If
    4. ' oder
    5. If Not IO.File.Exists(...) Then
    6. ' ...
    7. End If
    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!

    Lösung + nächste Frage

    Hallo Leute,
    erstmal vielen herzlichen Dank für all eure Lösungsvorschläge.
    Ich habe eine Methode gewählt die etwas anders aussieht.

    Ich starte schlicht mit einem Begrüßungsbildschirm und habe da in das Click_Event meinen Code reingepackt. Macht optisch auch etwas her und funktioniert einwandfrei.
    Hier der entscheidende Codeausschnitt der sich hinter dem Begrüßungsbildschirm verbirgt:

    VB.NET-Quellcode

    1. Private Sub ApplicationTitle_Click(sender As System.Object, e As System.EventArgs) Handles ApplicationTitle.Click
    2. If Not My.Computer.FileSystem.FileExists("KW.Dat") = True Then
    3. Form2.Show()
    4. Me.Hide()
    5. Else
    6. LoginForm1.Show()
    7. Me.Hide()
    8. End If
    9. End Sub

    Den Rest vom Code des Begrüßungsbildschirms habe ich so gelassen wie es in den Voreinstellungen war.

    Meine nächste Frage wäre: Wenn ich mein Programm beende, speziell über einen Klick auf das x oben Rechts, werden irgendwie nicht alle Formen geschlossen.
    Kann mir jemand sagen wieso das so ist und wie ich das Lösen kann?

    Liebe Grüße
    vbmatze
    ein splashScreen läuft im NebenThread.
    Wenn du da weitere Forms öffnest, laufen die auch im Nebenthread.

    Gewissermaßen wird dadurch der NebenThread zum MainThread, und das eigentliche Startformular ist nicht mehr StartFormular.

    Damit kann auch zusammenhängen, dass die Einstellung "HerunterFahren beim Schließen des MainForms" nicht mehr funktioniert.
    ja du kannst das über den Dialog abfangen:
    Ich zeig dir hier mal kurz wie man ne Form eigentlich richtig öffnet:

    VB.NET-Quellcode

    1. Dim neueForm=New Form2
    2. neueForm.MdiParent = Me
    3. neueForm.StartPosition = FormStartPosition.CenterParent
    4. neueForm.Showdialog()

    So jetzt hast du nämlich die Chance das Formresult abzufangen mit:

    VB.NET-Quellcode

    1. If neueForm.DialogResult = Windows.Forms.DialogResult.OK Then
    2. ... mache das
    3. elseif neueForm.DialogResult = Windows.Forms.DialogResult.Cancel then
    4. ....
    5. End If


    Und auf den beenden Button von Form 2 legst du jetzt sowas wie:

    VB.NET-Quellcode

    1. Me.DialogResult = Windows.Forms.DialogResult.Cancel
    2. Me.Close()


    auf den ok Button sowas:

    VB.NET-Quellcode

    1. Me.DialogResult = Windows.Forms.DialogResult.ok
    2. Me.Close()



    mit deiner Form.show -> Aktion läßt du halt einem Benutzer zu viele Formen gleichzeitig parallel zu öffnen, was hier und das zu argen Schwierigkeiten führen kann, außer wenns natürlich so gewollt ist und es evtl, wirklich partiell andere Dinge sind.

    Ähm und zu deiner eigentlichen Frage: da hab ich keine Ahnung :D --> ich glaub du mußt es dann so machen, dass deine Main nach offenen Formen sucht und diese über nen neu gesetztes Flag, was durchs schließen der Form kommt, auch den rest schließt

    Bzw so kannst du den X Button abfangen:

    VB.NET-Quellcode

    1. Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. If e.CloseReason = CloseReason.UserClosing Or _
    3. e.CloseReason = CloseReason.TaskManagerClosing Then _
    4. e.Cancel = True
    5. End Sub


    Aber das willst du gar nicht wahrscheinlich!! Weil man das ganz selten will!

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

    RodFromGermany schrieb:

    FileExists() und IO.File.Exists() liefern beide Boolean zurück, also:
    Das meinte ich nicht damit.
    Ich habe es gemeint, dass er es prüft ob der Wert nicht True ist, statt gleich auf False zu prüfen.
    If Not My.Computer.FileSystem.FileExists("KW.Dat") = True Then (ich weiß es gibt ein VB-Tag, aber da kann man die Schrift nicht Fett machen)
    ->Gleich auf False prüfen, da Nicht True ja False ist.

    Natürlich liefern beide einen Boolean Wert zurück, deswegen habe ich auch IO.File.Exist genommen, um mir etwas schreibarbeit zu ersparen.
    @bastimw: Ich werde mal sehen ob ich mit deinem Code etwas basteln kann.

    Ich habe in meiner ich nenne sie mal "MainForm" einen Button eingebaut, der "Beenden" heisst. Dort habe ich hinterlegt, dass sämtliche Formen geschlossen werden mit
    formxyzbla.close(). Das funktioniert auch. Wenn man aber in der MainForm oben rechts auf das X drückt, bleibt aber immer iwie mindestens eine Form offen. Ich weiss nur nicht welche, denn die anderen Formen werden nicht angezeigt. Ich erkenne es daran, dass der Grüne-Pfeil (Debug-Start-Button) in der IDE nicht angezeigt wird sondern daneben das blaue Viereck also dieser Stopp-Button. Wenn ich den drücke wird ja das Debuggen beendet und er schließt alle Formen. Wie kann ich herausfinden welche Formen noch offen sind? Oder Wird bei einem Klick auf das X in einer beliebigen Form nur die jeweilige Form geschlossen und alle anderen nicht. ?
    @vbmatze Mach den gleichen Code wie beim Beenden Button doch auch in das Form_Closing Event.

    Oder noch besser:
    Den Code vom Beenden Button machst du in einen externen Sub.
    Jetzt rufst du im Click-Event des Buttons und im Form_Closing-Event diesen Sub auf.

    P.s.: Logischerweise wird nur das Fenster geschlossen, wo du auch auf das X geklickt hast.
    Probier auch mal:

    VB.NET-Quellcode

    1. Application.Exit()


    Das sollte alles schließen.