MdiForm in MdiContainer bei Start an einer bestimmten Position anzeigen

  • C#
  • .NET (FX) 3.0–3.5

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von KidRick.

    MdiForm in MdiContainer bei Start an einer bestimmten Position anzeigen

    Hallo liebes Forum,

    ich habe meine Form (MainWindow) als MdiContainer und lasse dort mithilfe des folgendem Codes, andere Windows anzeigen:

    C#-Quellcode

    1. ClipsWindow clips = new ClipsWindow();
    2. clips.MdiParent = this;
    3. clips.Show();

    Allerdings würde ich gerne die Form die im Container angezeigt wird unten Anzeigen lassen (beim Starten). Habe es mit clips.Dock = DockStyle.Bottom; ausprobiert allerdings liegt hier das Problem das ich danach die Form nicht wie gewohnt verschieben kann. Gibt es da nicht irgend eine andere Möglichkeit?

    Grüße,
    Jan
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    @KidRick Probier mal so was, das müsste in Parent-Koordinaten gehen.

    C#-Quellcode

    1. clips.Location = new Point(10,10);
    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!
    @KidRick Du musst noch die StartPosition setzen:

    VB.NET-Quellcode

    1. Dim dlg As New Form2
    2. dlg.MdiParent = Me
    3. dlg.StartPosition = FormStartPosition.Manual
    4. dlg.Location = New Point(17, 17)
    5. dlg.Show()
    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!
    @RodFromGermany

    StartPosition war bereits gesetzt ;)
    Hier der Code:

    C#-Quellcode

    1. ClipsWindow clips = new ClipsWindow();
    2. clips.MdiParent = this;
    3. clips.Location = new Point(17, 17); // auch mit 10, 10 funktioniert das nicht
    4. clips.Show();

    Allerdings hier das Problem das das Resultat folgendermaßen aussieht (Bild im Anhang). Dabei würde ich es gerne halt unten anzeigen lassen.
    Bilder
    • unten_links.PNG

      147,86 kB, 1.365×767, 256 mal angesehen
    Software being "Done" is like lawn being "Mowed". (Jim Benson)

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

    KidRick schrieb:

    Dabei würde ich es gerne halt unten anzeigen lassen.
    Dann musst Du Dir die Position ausrechnen.
    Höhe des Child-Fensters und Client-Höhe des Parent-Fensters, 5 ist die Höhe des Randes von Form1, die kann man auch iwo auslesen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim dlg As New Form2
    3. dlg.MdiParent = Me
    4. dlg.StartPosition = FormStartPosition.Manual
    5. Dim y = Me.ClientRectangle.Height - dlg.Height - 5
    6. dlg.Location = New Point(0, y)
    7. dlg.Show()
    8. 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!
    @RodFromGermany
    Allerdings wird mir jz folgende Exception geschmissen:

    VS 2013 for Desktop schrieb:


    Non-invocable member 'System.Windows.Forms.Form.Location' cannot be used like a method.
    .

    Code ist folgender:

    C#-Quellcode

    1. ClipsWindow clips = new ClipsWindow();
    2. clips.MdiParent = this;
    3. var pointY = this.ClientRectangle.Height - clips.Height - 5; // sowohl dynamic als auch int, gleiche Exception
    4. clips.Location(0, pointY); // bei Location gibt es die Exception
    5. clips.Show();


    // Sorry mein Fehler habe new Point vergessen :D
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Grundlagen? Location ist vom Typ Point und folglich musst Du einen instanziieren und zuweisen.
    #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 :!:

    Location ist keine Methode, sondern eine Property und Properties muss man zuweisen. Das solltest Du mittlerweile wissen!
    #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 :!: