Laden...

Mit C# Ausmaße des aktuellen Bildschirms ermitteln

Erstellt von islander vor einem Jahr Letzter Beitrag vor einem Jahr 544 Views
I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr
Mit C# Ausmaße des aktuellen Bildschirms ermitteln

Moin!
Ich bin C# Anfänger!
Ich arbeite mit Visual Studio 2022, wo vieles im Hintergrund zur Verfügung gestellt wird, unter Win10 und habe den Entwicklermodus [noch] nicht aktiviert.

Für eine Übung, eine Consolen-Anwendung, möchte ich die Größe des aktuellen Bildschirms mit nach stehendem Code ermitteln.
Nichts aber davon läuft.


// Ausmaße des aktuellen Bildschirms ermitteln ...

// Version 1
int Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
int Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;

//Version 2
double height = SystemParameters.FullPrimaryScreenHeight;
double width = SystemParameters.FullPrimaryScreenWidth;
double resolution = height * width;

// Version 3
System.Windows.SystemParameters.PrimaryScreenWidth;
System.Windows.SystemParameters.PrimaryScreenHeight;

// Version 4
int screenHeight = Screen.PrimaryScreen.Bounds.Height;
int screenWidth = Screen.PrimaryScreen.Bounds.Width;


// Ausmaße des aktuellen Bildschirms ermitteln

VS2022 kann mit »Screen«; »Forms«; »Systemparameters«, etc. nichts anfangen.

Was habe ich weggelassen/vergessen/übersehen?

mfg hans

4.941 Beiträge seit 2008
vor einem Jahr

An dem Namensbereich System.Windows.Forms ist ersichtlich, daß für diese der gleichnamige Verweis (auf die Assembly) erforderlich ist, welche in einem Konsolenprojekt (im Gegensatz zu einem Windows-Forms-Projekt) nicht voreingestellt ist.
Bei einem .NET Framework 4.x Projekt mußt du also bei deinem Projekt "Verweis hinzufügen" auswählen und dann die System.Windows.Forms-Assembly hinzufügen.
Bei neueren .NET5/6-Projekten s. z.B. Konsole+Windows Forms in .NET 5

I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

An dem Namensbereich System.Windows.Forms ist ersichtlich, daß für diese der gleichnamige Verweis (auf die Assembly) erforderlich ist, welche in einem Konsolenprojekt (im Gegensatz zu einem Windows-Forms-Projekt) nicht voreingestellt ist.
[...]

Moin!

Vielen Dank, aber ich glaube, das ganze ist für die Fingerübungen eines Anfängers, mit/in einem Konsolenprojekt, zu umständlich/aufwändig!

mfg hans

16.841 Beiträge seit 2008
vor einem Jahr

So funktioniert nun mal das System, ob Dir das gefällt oder nicht.
Das kann niemand ändern, völlig egal ob Anfänger-Stand oder nicht, musst halt erlernen. Hab alle gemusst.
Dem System ist Dein Wissensstand egal. Muss man akzeptieren und durch, in dem Fall auch Du.
Beschweren bringt nichts - vor allem nicht in einem Forum.

3.825 Beiträge seit 2006
vor einem Jahr

Für den Anfang ist es einfacher ein Winforms oder WPF Projekt anzulegen, da hat man die gewünschten Funktionen sofort zur Verfügung.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Für den Anfang ist es einfacher ein Winforms oder WPF Projekt anzulegen, da hat man die gewünschten Funktionen sofort zur Verfügung.

Grüße Bernd

Moin!
Ja, die Erfahrung habe ich heute Nachmittag auch gemacht.
Eine FormaApp gestartet und mit Steuerelementen gearbeitet.

Das erscheint mir für einen Anfänger besser geeignet, als mit einer ConsolenApp.

mfg hans

190 Beiträge seit 2012
vor einem Jahr

Hallo,
es kommt wie immer drauf an.
Wenn du dich mit den Grundlagen beschäftigen willst, zum Beispiel Vererbung, Werttypen, Verweistypen, Schleifen, Listen, usw. oder auch debuggen, dann macht sich eine Konsolenanwendung meistens besser. Man kann sich vieles sofort in der Konsole ausgeben lassen.
Wenn du aber etwas machen willst, was mit der Oberfläche zusammenhängt, dann nimm Winforms.

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

M
368 Beiträge seit 2006
vor einem Jahr

Weiterhin kann man sich z.B. ein Windows Forms Projekt anlegen und die gewünschten Ergebnisse auf der Konsole (o.ä) ausgeben lassen. Einen einfachen Button auf einer WinForms GUI platzieren und dessen _Click-Methode erweitern könnte so aussehen:

private void button1_Click(object sender, EventArgs e)
        {
            int Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
            int Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
            Console.WriteLine("Width :" + Width);
            Console.WriteLine("Height :" + Height);
            Console.ReadLine();
        } 

Ausgabe (z.B.) nach Klick auf "Run" beim Debuggen:
...
Width :1280
Height :1024

Allerdings sollte man erst auf Kommandozeile üben, später dann im GUI-Bereich

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Weiterhin kann man sich z.B. ein Windows Forms Projekt anlegen und
[...]

Moin!
Vielen Dank!
Bin im Moment weg von der Konsole und hin zur Form und
habe, als Fingerübung, damit begonnen, einen Oberfläche zusammenzuklöppeln,
die ich ähnlich, wie zu DOS-Zeiten, in der Konsole gestalten wollte ...

mfg hans

4.941 Beiträge seit 2008
vor einem Jahr

Bezogen auf deinen Screenshot (und der Annahme, daß du dies alles händisch im Designer erstellt hast), möchte ich dir gleich [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls empfehlen (auch wenn es nur ein Testprogramm für dich ist, aber ich will dir unnötige Arbeit ersparen).

I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Moin!
Vielen Dank, werde ich mir ansehen und durcharbeiten.

Ich bin dabei, diese Oberfläche, zur Laufzeit,
mit drei Schleifen zu erzeugen
die Elemente, in/mit den Schleifen zu positionieren
und ihnen alle nötigen Eigenschaften mitzugeben.

Wie schon gesagt, ohne großen Anspruch, nur als Fingerübung,
damit das Hirn etwas zu tun hat - und es macht Spaß.

Ich erlebe C# nun sehr Entwicklerfreundlich.

mfg hans

M
368 Beiträge seit 2006
vor einem Jahr

Oberfläche zusammenzuklöppeln,

Evtl. hat VS auch Container anzubieten, welche sich (im Hintergrund) um die Initialisierung, Ansprache, Formatierung, Funktionalität,... der untergeordneten Elemente kümmern. Im konkreten Fall z.B. eine DataGridView mit mehreren Spalten und DGVComboBoxColumn als ColumnType (s. Anhang)

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Moin!
Das kommt sicher als nächstes dran!

mfg hans