MDI: Genaue Positionierung eines Forms an einem Control des Child Forms

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Bibi.

    MDI: Genaue Positionierung eines Forms an einem Control des Child Forms

    Guten Tag,

    ich habe vor einer Weile schon mal an diesem Problem gearbeitet, damals nicht genaues gefunden und es wegen anderer Dinge liegen gelassen.
    Nun muss ich wieder dabei und möchte folgendes erreichen.

    Ich habe ein MDI Projekt mit mehreren Child-Formularen.
    Auf diesen Forumlaren befinden sich unterschiedliche Controls.
    Textboxen, Datagridviews und so weiter.

    Nun möchte ich ein extra Form - ShowDialog - öffnen das positioniert direkt an ein bestimmtes Control angezeigt werden kann.
    Aber jegliche Versuche den genauen Punkt zu ermitteln und zu setzen laufen schief und hier benötige ich eure Hilfe.

    Das Problem liegt beim MDI. So sind die Positionierungen ausgehend von dem Parten-Form, da das zu öffnende Fenster aber kein MDI Child ist, geht dort die Positionierung von anderen Punkten aus.

    Wie muss ich es anstellen die genaue Position eines bestimmen Control einer Child Form zu ermitteln, so das dieses Form positioniert auch an diesem zu finden ist.
    Ähnliches kennt man ja von Suchen wo man etwas eingibt, eine Vorauswahl der Suchen in einem Datagrid direkt unter dem Suchfeld angezeigt werden.

    Für jegliche Hilfestellungen und Richtungsweisungen bin ich sehr Dankbar.
    Probier mal dies:
    Form1 mit Button1, Form2

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Using dlg As New Form2
    3. Dim loc As New Point
    4. loc = Button1.PointToScreen(Button1.Location)
    5. loc.X += Button1.Width
    6. loc = dlg.PointToClient(loc)
    7. dlg.Location = loc
    8. dlg.ShowDialog()
    9. End Using
    10. 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!
    vlt. am besten du machst ein sample-projekt und ladtst das hoch, und sagst, bei welchem Klick welches Form an welches Control geklebt werden soll. Da kannman das dann einbauen. weil so muß man dir halt glauben, dasses nicht geht, und kann kaum was fundiertes dazu sagn.
    Zum hochladen kannste vlt. SolutionExplorer verwenden, der kann lauffähige Backups erstellen - ist sowieso häufig sehr nützlich.
    Hallo,

    eine Kopie von meinem Projekt (mittlerweile über 5 MB groß) kann ich schlecht machen.
    Habe aber eben ein Sample gemacht das die Sache sehr grob behandelt inkl. dem oben genannten Code.

    Ich hoffe das könnte helfen.

    Projekt hänge ich an...

    Ich danke vielmals :)
    Dateien
    • MDIPOS.rar

      (70,6 kB, 136 mal heruntergeladen, zuletzt: )
    Bei Textbox.PointToScreen musste Point.Empty ( 0 / 0 ) angeben, um den Nullpunkt der Textbox zu addressieren.

    Aber auch sonst fandich wirr, was du gecodet hast. Ich hab jetzt was gemacht, was das 3. Form bei Focus-Erhalt positioniert.
    Dateien
    • MDIPOS00.zip

      (16,7 kB, 160 mal heruntergeladen, zuletzt: )

    ErfinderDesRades schrieb:

    Bei Textbox.PointToScreen musste Point.Empty ( 0 / 0 ) angeben, um den Nullpunkt der Textbox zu addressieren.

    Genau diese Zeile war die den Fehler ausgemacht hat.
    Somit war das neue Formular direkt über das Element positioniert, super.


    ErfinderDesRades schrieb:


    Aber auch sonst fandich wirr, was du gecodet hast. Ich hab jetzt was gemacht, was das 3. Form bei Focus-Erhalt positioniert.

    Es war auch nur ein reines "Sample" das ich eben schnell zusammen geschustert habe, damit ich bei diesem Thema geholfen werden kann.
    Im richtigen Projekt sieht das ganze wesentlich anders aus.

    Ich danke vielmals, so scheint es jetzt zu funktionieren.