Modale und nicht modale Dialoge

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Amro.

    Modale und nicht modale Dialoge

    Aus diesem Thread ausgelagert: Instanziierung von Forms und Aufruf von Dialogen ~Thunderbolt

    Was ist mit modal und nicht modaler Aufruf genau gemeint
    Und
    Ist es dann so wenn ich eine Oberfläche im Designer erstelle (also Form mit Buttons,Textboxen etc. ), eigentlich eine Klasse
    designe ?

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

    ein modaler Aufruf ist zb das Form, was bei Messagebox.Show() kommt (los, probiers aus!).
    Dieses Form versperrt die anderen Forms, und du kannst in deim Proggi erst weiter machen, nachdem du die Messagebox weggeklickt hast.

    Bei einem unmodalen aufruf erscheint das neue Form neben dem alten, und du kannst problemlos zwischen beiden wechseln (geht natürlich nicht mit Messagebox).

    Amro schrieb:

    Ist es dann so, dass wenn ich eine Oberfläche im Designer erstelle (also Form mit Buttons,Textboxen etc. ), ich eigentlich eine Klasse
    designe ??
    ich hab mal den Satz bisserl verändert so wie ich ihn verstehen kann.
    Und Antwort: Ja, so isses :thumbup:
    Der Form-Designer ist nix als ein nützliches Tool, mit dem du durch grafische Eingaben eine Klasse programmierst. Du kannst den generierten Klassen-Code sogar angucken, musste im Solution-Explorer "Alle Dateien anzeigen" anklicksen, dann den Form1-Knoten erweitern, und die Form1.Designer.vb öffnen.
    Da siehst du dann den Code, den du auf grafische Weise programmiert hast.
    ​MessageBox.Show ruft dann wohl oder übel intern einen Dialog auf und der wird nat. instanziiert.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Naja, wenigstens fragt er nach ^^ . Eine Methode, oder Member einer Klasse können statisch sein, das heißt diese Methoden können nur auf statische Felder, Member und Methoden, nicht aber auf nicht statische Dinge zugreifen. Man kann auf statische Dinge ohne Instanz zugreifen, da keine gebraucht wird. Shared deklariert in VB eine Methode oder ein Feld als statisch. Statische Sachen schlagen der Objektorientierung ein Schnippchen, denn nicht alles ist mit OOP zu lösen. Im Falle MessageBox.Show(), dient dass nur der Kapselung.
    @Amro Sinnigerweise verhält es sich bei der MessageBox anders als bei anderen Dialogen.
    Es gibt nur MessageBox.Show(), das ist modal.
    Bei Dialogen ist .Show() nicht modal, .ShowDialog() hingegen modal.
    Probier dies (ohne jetzt über das fehlende Dispose reden zu wollen):

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim dlg = New Form2
    3. dlg.Show()
    4. Using dlg2 = New Form2
    5. dlg2.ShowDialog()
    6. End Using
    7. Dim dlg3 = New Form2
    8. dlg3.Show()
    9. End Sub
    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!
    bitte versuche sinnvolle Sätze zu formulieren.

    Ein Dispose kann man nicht überprüfen. .Dispose() ist eine Objekt-Methode, daher kann es "das Dispose" gar nicht geben.

    Da gibts normal auch nix zu überprüfen, man ruft .Dispose() auf, und dann ist disposed. Für Ausnahmen, bei bestimmten Klassen kann man auch .IsDisposed abprüfen, aber wie gesagt: Normal disposed man, und fasst das Objekt anschließend nicht mehr an.

    Amro schrieb:

    Und ist das überhaupt nötig, VB übernimmt das doch selbst mit den Garbage ?
    Ja, ist nötig, für genau die Fälle (und deren gibt es viele), in denen das Aufräumen durch den GarbageCollector nicht hinlangt.
    Google mal ein bischen nach "Dispose-Pattern" oder "Resourcenbereinigung".
    Oder lies das entsprechende Kapitel eines guten Buchs.
    Weil das Thema ist wichtig, bisserl kompliziert und sogar umstritten - bei Google ist nicht gesichert, dass du eine korrekte und vollständige Erläuterung erhälst.

    Amro schrieb:

    VB übernimmt das doch selbst mit den Garbage
    sofern es sich um managed Ressourcen handelt.
    Gelegentlich greift .NET auch auf unmanaged Ressourcen zu, die müssen disposed werden.
    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!
    @ EDR
    Sorry, meinte nicht das Dispose überprüfen sondern das Objekt das Disposed wurde.
    Bücher hab ich jetzt mehrere da sogar das Visual Basic von 2005 von Klaus Löffelmann.
    Das emphehlst du ja immer in deinen tuts. War auch nicht einfach es zu bekommen.
    Aber ich habe bedenken das ich da vielleicht zu viel altes Zeug lerne.
    Sobald der Feiertags-Stress vorbei ist werde ich mich ans lesen machen.
    @RFG
    Gut Danke
    Werde auch schauen managed und unmanged in VB.net zu unterscheiden (lernen).

    Amro schrieb:

    Klaus Löffelmann.... War auch nicht einfach es zu bekommen.
    hmm? kann man doch einfach downloaden: Entwickler-Ressourcen und Tools, Bücher und WebCasts

    Da ist kein altes Zeug drin, was du nicht brauchen würdest.
    Allenfalls das neuere Zeug, was seither hinzugekommen ist, entgeht dir, wenn Löffi deine einzige Lektüre bleibt, und du einzig durch Löffi2005-Lesen imstande bist, was hinzuzulernen (wonach es ja nicht aussieht ;) ).
    Aber all das neure Zeugs baut auf dem alten auf, also man kanns kaum verstehen, wenn man den Löffi2005er-Stoff nicht geschnackelt hat.

    Ok, ein paar Seiten kannste auch überblättern. Etwa das Kapitel zum Umstieg von vb6 sagt dir nix, wenn du vb6 nie kennengelernt hast. (Falls du aber doch vb6 oder vba kennst, dann ist das Kapitel sehr wichtig!) Aber das merkste glaub schnell selber.

    Und einiges, was er vom VisualStudio beschreibt, stimmt heutzutage nicht mehr. Aber stattdessen gibt es anderes, und deshalb darfst du diese Teile nicht überblättern, sondern musst dich auf die Suche machen, wie die beschriebenen Features heutzutage im VS umgesetzt sind.

    Und jetzt lies das Kapitel zur Resourcenbereinigung nach - dann hast du aus diesem Thread hier ein Vielfaches dessen gelernt, was du eiglich gefragt hattest.