Form im zweiten Fenster ansprechen

  • VB.NET

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

    Form im zweiten Fenster ansprechen

    Hallo,

    ich habe an meinem Rechner einen Zweiten Monitor. Auf diesem liegt eine Zweite Form (Form2). Die besteht aus einem Label und einer Picture Box.

    Ich möchte gerne dies Form, die immer auf dem zweiten Bildschirm geöffnet liegt, mit Daten versorgen.
    Ab und zu will ich den Text im Label ändern (hinzufügen, löschen, ändern) und das Bild in der Picture Box.

    Wie kann ich die zweite Form ansprechen, ich weiß ja deren Namen nicht.

    öffnen tu ich das Formular zwei mit:

    VB.NET-Quellcode

    1. Dim _screenName As New List(Of String)
    2. Dim _screenBounds As New List(Of String)
    3. Dim _screenType As New List(Of String)
    4. Dim _screenWorkingArea As New List(Of String)
    5. Dim _screenPrimeryScreen As New List(Of String)
    6. 'Wieviele Bildschirme gibt es
    7. For Each screen In System.Windows.Forms.Screen.AllScreens
    8. _screenName.Add("Device Name: " + screen.DeviceName)
    9. _screenBounds.Add("Bounds: " + screen.Bounds.ToString())
    10. _screenType.Add("Type: " + screen.GetType().ToString())
    11. _screenWorkingArea.Add("Working Area: " + screen.WorkingArea.ToString())
    12. _screenPrimeryScreen.Add("Primary Screen: " + screen.Primary.ToString())
    13. Next
    14. 'Nur wenn mehr als 1 Bildschirm vorhanden
    15. If _screenName.Count > 1 Then
    16. If My.Settings.QrCode = True Then
    17. Dim screen As Screen
    18. screen = screen.AllScreens(1)
    19. Dim frm As New Form2 ' Hier wird eine Instanz erzeugt.
    20. frm.[FormName] = "Form1"
    21. frm.Timer_Zeit = -1
    22. frm.Bild = "Front.jpg"
    23. frm.Label_Text = vbCrLf & BildschirmText("BildschirmText.txt")
    24. frm.StartPosition = FormStartPosition.Manual
    25. frm.Location = New Point(screen.Bounds.X + 1, screen.Bounds.Y + 1)
    26. frm.Show()
    27. End If
    28. End If


    Thema Verschoben ~ EaranMaleasi

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

    frifri schrieb:

    ich weiß ja deren Namen nicht.
    Aber deren Instanz.

    VB.NET-Quellcode

    1. Dim frm As New Form2 ' Hier wird eine Instanz erzeugt.
    Pack die Variable frm aus der Prozedur in die Klasse.
    Feddich.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Der o.g. Code von Dir befindet sich bereits in einer Klasse. Ich vermute mal ganz stark, sie heißt Form1. Du hast in Post#1 den Code-Ausschnitt aus einer Prozedur. Darin ist eine Variable namens frm in Zeile #21 definiert. Wenn Du (im krassesten Fall) diese Zeile vor die Prozedur (will heißen: direkt über die Prozedur) schreibst (also in die Zeile vor Private Sub WieAuchImmerDieProzedurHeisstDieInPost#1ZuSehenIst, dann ist frm klassenweit verfügbar und kann später angesprochen und verändert werden. Lass in der Zeile aber das New weg. Also wird wohl die Datei, in der Du Dich befindest, dann beginnen mit:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim frm As Form2
    3. '...
    4. 'Deine in Post#1 gezeigte Prozedur
    5. 'und statt Zeile#21 eben
    6. frm = New Form2

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Grundsätzlich geht das dann so, dass Du klassenweit nicht Dim frm As Form2 verwendest, sondern:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private ReadOnly frmList As New List(Of Form2) 'ob Dim oder Private ist an dieser Stelle egal
    3. '...
    4. 'Deine in Post#1 gezeigte Prozedur
    5. Dim frm As New Form2 ' Hier wird eine Instanz erzeugt.
    6. frm.[FormName] = "Form1"
    7. frm.Timer_Zeit = -1
    8. frm.Bild = "Front.jpg"
    9. frm.Label_Text = vbCrLf & BildschirmText("BildschirmText.txt")
    10. frm.StartPosition = FormStartPosition.Manual
    11. frm.Location = New Point(screen.Bounds.X + 1, screen.Bounds.Y + 1)
    12. frm.Show()
    13. frmList.Add(frm)
    Dadurch hast Du alle Form2-Instanzen in einer Liste namens frmList. Die könntest Du dann z.B. mit einer For-Schleife durchgehen und mit einem/mehreren/allen Forms irgendwas machen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!