Inhalt einer Form in einer anderen Form anzeigen lassen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Kampfkeks64.

    Inhalt einer Form in einer anderen Form anzeigen lassen

    Hey Leute,
    ich habe ein kleines Problem, unzwar:
    Ich habe erstmal 2 Bildschirme angeschlossen. Auf den ersten mache ich FORM1 und auf den zweiten mache ich FORM2. Ist es irgendwie möglich, dass in FORM1 ein Quadrat ist, dass den gesamten Inhalt von FORM2 anzeigt. Das Quadrat soll aber möglichst nicht die ganze Form bedecken sondern nur etwa ein viertel.

    Wäre echt super, wenn ihr mir hilft.
    Danke im Vorraus!
    Wenn Du das Bild der Form2 meinst, nicht aber eine funktionale Form2, kannst Du Dir einen ScreenShot der Form2 machen und in Form1 darstellen.
    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!
    Ich weiß dass habe ich mir auch schon gedacht, aber wie macht man in VB 2010 einen Screenshot. Ich will es ja als Code, und wie kann ich diesen Screenshot denn in einer Picturebox darstellen, das Bild muss sich regelmäßig von selbst aktualisieren.

    Ich demonstriere mal:
    Der erste Bildschirm ist auf mich gerichtet und der zweite nach außen, in der Form auf dem ersten Bildschirm kann ich die Positionen der Labels verändern. Wenn ich das getan habe, muss ich den zweiten Bildschirm erst umdrehen, damit ich sehen kann ob das so in Ordnung ist.

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

    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <StructLayout(LayoutKind.Sequential)>
    4. Public Structure POINTAPI
    5. Public x As Integer
    6. Public y As Integer
    7. End Structure
    8. <DllImport("user32.dll")> _
    9. Public Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByRef pt As POINTAPI) As Integer
    10. End Function
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. Dim bmp As New Bitmap(Me.Width, Me.Height)
    13. Dim g As Graphics = Graphics.FromImage(bmp)
    14. Dim dx As Integer = (Me.Width - Me.ClientRectangle.Width) \ 2
    15. Dim dy As Integer = Me.Height - Me.ClientRectangle.Height - dx
    16. Dim pt As POINTAPI
    17. pt.x -= dx ' -Rand-Breite
    18. pt.y -= dy ' -Titelzeilen-Höhe
    19. ClientToScreen(Me.Handle, pt)
    20. g.CopyFromScreen(pt.X, pt.Y, 0, 0, Me.Size)
    21. g.Dispose()
    22. bmp.Save("c:\Temp\Shot.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    23. Using dlg As New Form2
    24. dlg.BackgroundImage = bmp
    25. dlg.ShowDialog()
    26. End Using
    27. End Sub
    28. End Class
    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!
    Ich habe eine anständigen Code gefunden:

    VB.NET-Quellcode

    1. For Each c As Control In Form2.Controls
    2. panel1.Controls.Add(c)
    3. Next
    4. Panel1.Show()

    Nur gut wäre es wenn man es noch so machen könnte das dass Panel dann nicht die ganze Form bedeckt.
    Ist dass möglich??

    Und eigendlich wollte ich nicht so was umständliches wie dass was über diesem Post ist

    Edit by Manschula: Für Code-Ausschnitte den entsprechenden Tag verwenden! --> VB-Tag eingefügt

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

    Mir ist gerade aufgefallen dass der Code den ich gepostet habe die Form nur kopiert, gibt es denn keine andere Möglichkeit. Man muss du Form nicht steuern können, es reicht wenn ich die Form nur sehen kann, sie muss regelmäßig aktualisiert werden und sie darf nicht die ganze Form bedecken sondern nur einen Teil.

    Am optimalsten wäre es so:
    Ein VB Timer macht in jeder Sekunde einmal einen Screenshot von meiner Form. In meiner anderen Form wird diese Screenshot verkleinert und in einer PictureBox angezeigt. Wenn in meiner Form ein Label oder so verschoben wird kann ich es in dieser PictureBox sehen. Dass meine ich mit "Aktualisieren"

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