Laden...

Forenbeiträge von Tom3419 Ingesamt 2 Beiträge

03.01.2025 - 13:14 Uhr

Hallo Zusammen,

erstmal vielen Dank für die Antworten.

Die ganzen Skalierungswerte hätten eigentlich nicht darein gemusst.

Über die Skalierung xPos und yPos habe ich es schon versucht. Das heißt den Hauptbildschirm auslesen und den dann als Offset benutzen. Dann kommt das Fenster nicht an der oberen linken Ecke des 2. Bildschirms an sondern leider irgendwo. Obwohl es das laut Auflösung der Bildschirme tun sollte (1920 Pixel in x Richtung).

Aus diesem Grund würde ich das Fenster gerne über den Screenindex zuweisen. Aber wie schon beschrieben funktioniert das nicht.

private void Anzeige (int screenIdx, int xPos, int yPos, int xDim, int yDim)
{

	//Das hier tut nicht wie es soll hab ich den Anschein
    Screen monitor = Screen.AllScreens[screenIdx];

    f3.Size = new Size(xDim, yDim);
    f3.BackColor = Color.Red;
    f3.Show();
}

Das hier öffnet das Fenster immer am Hauptmonitor

//Tut das gleiche, sollte es aber doch nicht?
Anzeige(1, 0, 0, 500, 500);
Anzeige(0, 0, 0, 500, 500);

Oder wo ist der Denkfehler?

02.01.2025 - 22:16 Uhr

Guten Abend,

ich arbeite mich gerade ein wenig in c# ein. Leider habe ich noch sehr wenig Erfahrung.

Folgendes Problem beschäftigt mich jetzt schon seit einiger Zeit, was ich nicht gelöst bekomme.

Ich möchte ein zweites Fenster auf einem externen Monitor öffnen. Mit folgendem Code konnte ich mir schon die Informationen der Bildschirme ziehen:

            foreach (var screen in System.Windows.Forms.Screen.AllScreens)
            {         
                listBox1.Items.Add("Device Name:" + screen.DeviceName);
                listBox1.Items.Add("Bounds:" + screen.Bounds.ToString());
                listBox1.Items.Add("Working Area: " + screen.WorkingArea.ToString());
                listBox1.Items.Add("PrimaryScreen: " + screen.Primary.ToString());
                listBox1.Items.Add("");
            }

Mit folgender Funktion kann ich mir das Fenster anpassen:

      private void Anzeige (int screenIdx, int xPos, int yPos, int xDim, int yDim)
        {         
            Screen monitor = Screen.AllScreens[screenIdx];
            Rectangle rect = monitor.WorkingArea;          
            f3.StartPosition = FormStartPosition.Manual;
            f3.Location = new Point(xPos, yPos);
            f3.Size = new Size(xDim, yDim);
            f3.BackColor = Color.Red;
            
            f3.Show();
        }    

Wenn ich nun als screenIdx eine 0 setze, öffnet das Fenster am linken oberen Bildschirmrand. Bei einer 1 das Gleiche. Bei einer 2 stürzt das Programm ab, weil das Array natürlich nur bis 1 geht.

Mein Hauptbildschirm ist links, der zweite Monitor rechts. Also wäre ich davon ausgegangen, dass links 0 und rechts 1 ist.

Wo liegt der Fehler?

Vielen Dank schon mal und es wäre sehr nett wenn die Antworten auf "Sendung mit der Maus" Niveau wären, damit auch ich sie umsetzen kann.