Laden...

Form/Control.Width abfragen?

Erstellt von islander vor einem Jahr Letzter Beitrag vor einem Jahr 522 Views
I
islander Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr
Form/Control.Width abfragen?

Moin!
Kann man, in C#, im Code, die Breite einer vorhandenen Form abfragen?

So nach dem Motto:

int aktuelleBreite = Form1.Width; , oder ähnlich ?

Beispiele, die im Netz zu finden sind, zeigen, wie man Controls zur Laufzeit erstellt und ihnen eine Breite mitgibt.

mfg hans

D
261 Beiträge seit 2015
vor einem Jahr

Form.Size Property (System.Windows.Forms)

Dadurch erhältst du eine Instanz des Size structs und dieses enthält dann Width und Height der Form.

PS: Googlen ist in solchen Fällen meistens schneller als einen Beitrag im Forum zu eröffnen. Mit der Google Suchanfrage "form width docs microsoft c#" ist die von mir verlinkte Seite, zumindest bei mir, das erste Ergebnis.

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

[...]
PS: Googlen ist in solchen Fällen meistens schneller als einen Beitrag im Forum zu eröffnen. Mit der Google Suchanfrage "form width docs microsoft c#" ist die von mir verlinkte Seite, zumindest bei mir, das erste Ergebnis.

Moin!
Die Seite hatte ich auch deutsch übersetzt gegoogelt,
welcher ich entnehmen kann, wie man eine neue form erstellt
und sie ausgestaltet.

Ich suche einfach nur nach einer korrekten Formulierung für das Auslesen des Width-Wertes.

mfg hans

D
261 Beiträge seit 2015
vor einem Jahr

Genauso wie du die Size beim Erstellen der Form übergibst, kannst du natürlich auch mit


Size myFormSize = form.Size;

die Size wieder auslesen.

Anschließend kannst du wieder über Zugriff auf myFormSize die Width auslesen:


int currentWidth = myFormSize.Width;

Du kannst aber auch ohne das Size struct zwischenzuspeichern den Wert auslesen:


int currentWidth = form.Size.Width;

4.939 Beiträge seit 2008
vor einem Jahr

Hallo,

der Code

int aktuelleBreite = Form1.Width;

ist so korrekt (sofern Form1 ein initialisiertes Form-Objekt darstellt).

Size wird nur benötigt, wenn man Breite und Höhe gleichzeitig abfragen möchte.
Es gibt auch noch ClientSize, welche die Größe für den inneren Bereich (d.h. für die untergeordneten Controls) einer Form zurückgibt.

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

Hallo,

der Code

int aktuelleBreite = Form1.Width;  

ist so korrekt (sofern Form1 ein initialisiertes Form-Objekt darstellt).

Moin!
»Form1« ist eine Form, mit der ich bereits arbeite ...


namespace MakeNewLabel_22_07_21
{
    public partial class Form1 : Form
     {

        public Form1()
        {
            InitializeComponent();

            // label.Top = (ClientRectangle.Height - label.Height) / 2;

            // 1.) int currentWidth = Form1.Width;

            // 2.)size myFormSize = form.Size;

            // 3.) int aktuelleBreite = Form1.Width;

        }


        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit(); // Programm beenden
        }
    }
}

Leider führte keiner der hier dankenwerterweise gemachten Hinweise zum Erfolg.

mfg hans

J
251 Beiträge seit 2012
vor einem Jahr

Innerhalb Form1 reicht entsprechendes:


 int aktuelleBreite = Width;

»Form1« ist eine Form, mit der ich bereits arbeite

Aber es wurde kein Objekt "Form1" initialisiert.

z.B.


Form1 myForm = new Form1();
int aktuelleBreite = myForm.Width;

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

[...]
Aber es wurde kein Objekt "Form1" initialisiert.

z.B.

  
Form1 myForm = new Form1();  
int aktuelleBreite = myForm.Width;  
  

namespace NewWidth_22_07_21
{
    public partial class Form1 : Form

            {
        public Form1()
        {
            InitializeComponent();

                 Form1 myForm = new Form1();
           int aktuelleBreite = myForm.Width;

           

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit(); // Programm beenden
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_Load_1(object sender, EventArgs e)
        {

        }
    }
}

Wird mit folgender Meldung abgelehnt: System.StackOverflowException

mfg hans

16.835 Beiträge seit 2008
vor einem Jahr

Weil Du die Form1 im Konstruktor der Form1 erzeugst.


public Form1()
        {
            InitializeComponent();

                 Form1 myForm = new Form1();

Davon abgesehen, dass sowas kein Sinn macht, geht das eben auch nicht, weil das eine endlose Rekursion erzeugt bis es dann eine StackOverflowException gibt.
Musst also das Snippet von Jamikus schon an der richtigen Stelle verwenden.

Hat aber nichts mit der Width zutun.

Ich kann nur raten, was Du willst, weils nicht wirklich ersichtlich ist:
Innerhalb der Form Instanz:


this.Width;

Außerhalb der Forminstanz:


Form1 myForm = new Form1();
int aktuelleBreite = myForm.Width;

M
368 Beiträge seit 2006
vor einem Jahr

Zwecks eines Erfolgserlebnisses (weitere Optimierungen oder "best practices" bleiben aussen vor): man erstellt wieder eine Windows Forms GUI-Applikation und platziert dort einen Button. In der _click-Methode dann:

 private void button1_Click(object sender, EventArgs e)
        {
           
            Form1 myForm = new Form1();
            int aktuelleBreite = myForm.Width;

            
            Console.WriteLine("aktuelleBreite :" + aktuelleBreite);
          
            Console.ReadLine();
        }
 

Ausgabe im Debuggen: "WindowsFormsApp_Console_Resolution.exe" (CLR (..)
aktuelleBreite :816
(..) beendet.

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

[...]

  
this.Width;  
  

[...]

Moin!
Genau das war/ist es!
👍
Danke an alle for help!

mfg hans