Anwendung in einer Form starten

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Anwendung in einer Form starten

    Hallo liebe Gemeinde,

    nach vielen Hilfen die ich hier schon gefunden habe muss ich nun doch mal eine Frage posten, da ich gar nicht weiß wie ich nach meinem Problem suchen soll bzw. es in 3 Worten beschreiben soll.

    Ich bin recht neu dabei mich mit VB zu beschäftigen, bisher entwickle ich fast ausschließlich Webseiten in PHP, aber VB ist da ja nicht sooo weit weg, nur die Syntax ist halt ziemlich anders, aber egal...

    Mein Problem, so wie ich es schon in etlichen Programmen gesehen habe:
    ich habe eine Windows.Form gebaut, habe dieser lediglich zur Optik eine weiße Hintergrundfarbe gegeben und oben einen MenüStrip eingefügt. Jetzt möchte ich einen Punkt in dem MenüStrip aufrufen und darauf eine Anwendung starten, eine andere Windows.Form (ich hoffe das macht man so)

    Diese Form startet auch prima mit Form2.show(), scheint aber von der eigentlichen Form völlig losgelöst zu sein, eben wie ein weiteres Programm...
    Ich möchte aber, das sich diese neue Form nur innerhalb des restlichen Fensters "aufhält", das Form1 vorgibt, so wie ich es in anderen Anwendungsprogrammen auch sehe. Das Fenster soll also quasi in der Form1 ablaufen, wenn ich es mit der Maus ziehe, dann darf es dabei nicht aus Form1 "herausgezogen" werden können.

    Kann mir jemand erklären wie die Verknüpfung dafür aussieht, was man dazu für Eigenschaften aktivieren oder deaktivieren muß? Oder muss ich dann in Form1 noch irgendeinen Gruppenrahmen ziehen und Form2 daran binden? Wenn ja, wie???
    Über eine Hilfe von euch wäre ich sehr dankbar.

    Gruß
    Doc
    Zum einen solltest du die 2. Form als Dialogfeld erstellen, das zur ersten Form gehört. Dann erscheinen auch nicht mehr zwei Taskleistenbuttons. Zum anderen solltest du vielleicht erklären, was diese 2. Form alles machen soll.
    Soll sie ein Bestätigungsfenster sein?
    Soll sie ein Optionsdialog sein?
    Außerdem verwirrt mich die Aussage, dass du mit Klick auf den Button im MenüStrip eine andere Anwendung öffnen möchtest. Eine Anwendung ist immer ein eigenständiges Programm. Zudem sind vb und php etwas grundverschiedenes.
    php ist eine Websprache. vb ist eine Computersprache.
    php ist eine Parsersprache. vb ist eine compilergestützte Sprache
    Hallo Leute,

    zunächst vielen Dank für die Vorschläge.
    Offensichtlich sollte ich also eher eine DialogForm verwenden, ok, kein Problem.

    Allerdings ist damit mein Wunsch noch nicht erfüllt, denn nach wie vor kann ich das aufgerufene Fenster auf dem Bildschirm frei bewegen, es ist nicht in meine Hauptform "eingebettet", sondern steht als neu aufgerufenes Objekt über ihr.

    Was ich aber mal gesehen und auch vor habe ist eine Form bzw. einen Dialog aufzurufen, der sich nur innerhalb der Hauptform bewegen kann in einem Rahemn, den ich ihm ggf. vorgebe.
    In dem Programm, wo ich das gesehen hatte, eine Kassensoftware, da konnte man das aufgerufene ProgrammDialogfenster nur im Programm selber bewegen. Zog man es aus dem Rand, so blieb der Cursor spätestens beim erreichen des Randes stehen, wenn man es z.B. mittels Drag irgendwo hinziehen wollte. Das Fesnter schob sich an den Rändern "hinter" das Hauptfenster und wenn der Cursor am Rand war konnte man nicht mehr weiterziehen.

    Dadurch wird dem Benutzer auch vermittelt, das es sich um ein Modul oder Anwendung (oder wie auch immer man das nennen will) des Programmes handelt und keine losgelöste Anwendung ist.

    Ich hoffe ich drücke mich einigermaßen verständlich aus.

    noch @pluginbauer:
    Die Fenster, die sich dann "öffnen" sollen z.B. Daten aus Datenbanken auslesen, Daten verändern, etc. Es sind dann halt die normalen Arbeitsfenster des Programmes, nicht nur reine Messageboxen oder so...

    Gruß
    Doc
    @picoflop:

    Ja, danke, jetzt hab ich es kapiert. Deine Erläuterung war aber sehr knapp bemessen dafür das ich ja nun gerade erstmal angefangen habe mit VB. die Syntax deines kurzen Codeschnipsels habe ich ja verstanden, hatte jetzt aber noch expreimentieren müssen wohin ich was schreiben kann, denn die Methode Show() habe ich ja für die Form schon im Menüstrip aufgrufen. Das wichtigste hierbei ist aber die Parent-Zuordnung zum Hauptfenster, habe ich jetzt verstanden.

    Letzte Frage dazu:
    Hat den NUR ein MDI Element eine "parent" Funktion oder kann man das auch jeder Form zuordnen? (Ohne das ich jetzt rumexperimentiere)
    Ist denn ansonsten ein MDI Objekt, wenn man die ganzen vorgefertigten MenüStrips da rausschmeißt im Endeffekt auch nur eine normale Form? (bis auf die parent Geschichte)
    Oder hat das MDI Element noch andere grundlegend wichtigen Funktionsunterschiede zu einer Form?

    Dazu erweiternd:
    Wo genau ist der unterschied zwischen einer Windows.Form und einem Object.Form oder Info.Form, außer das eben bei manchen Forms schon einige Felder oder Buttons vordefiniert sind...?

    Trotz allem Danke.

    Gruß
    Doc
    Hallo nochmal,

    vielen Dank für die Hilfen, mein Programm gedeiht schon ganz gut dank eurer Informationen.

    Eine Frage hätte ich jetzt noch, sie ist zwar vielleicht etwas Offtopic aber gehört doch zu der Gesamtproblematik:

    Wenn ich in der MDIForm z.B. im Public-Teil eine Variable definiert habe. Diese wird beim Programmstart durch Auslesen einer Datei gesetzt, wie kann ich dann in meinen dialogen oder Forms, die ja die MDIForm als Parent haben auf diese Variable zugreifen?

    Also der reine Variablenname steht in der untergeordneten Form nicht zur Verfügung, mit MDIForm.Variable geht es auch nicht, aber ich bin da doch bestimmt schon nah dran, oder?

    Vielen Dank nochmal für eure Hilfe...

    Gruß
    Doc

    DocMcSky schrieb:

    Wenn ich in der MDIForm z.B. im Public-Teil eine Variable definiert habe

    Im "Public Teil"? Gibbet net ;)
    Wenn du in einer Klasse (Form ist auch ne Klasse) eine Variable als Public (oder auch Friend, ... einfach mal nachschlagen) deklarierst, kannst du über InstanzName.Variablenname auch darauf zugreifen.
    Was NICHT geht:
    (Sei Me das aktuelle Child)
    Me.MdiParent.Variable
    Denn MdiParent ist ja FORM und nicht Form1, FrmMain, MeineSuperTolleForm etc
    Was geht, ist:
    Directcast(Me.MdiParent, Form1).Variable
    natürlich nur, wenn das Parent auch tatsächlich vom Typ Form1 ist. Ansonsten fliegt einem logischerweise zur Laufzeit der DirectCast um die Ohren. Sollte man also zwingend vorher prüfen, denn Programme werden alt und ändern sich und irgendwann ... ;)