Benutzer mit den meisten Antworten
Form1.ActiveForm.Width gibt immer falschen Wert zurück

Frage
-
Hallo,
Ich habe folgendes Problem wenn ich
namespace test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public int breite = Form1.ActiveForm.Width; private void Form1_Click(object sender, EventArgs e) { this.Text = breite.ToString(); } } }
erhalte ich als Breite immer 300px wenn ich aber
namespace test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Click(object sender, EventArgs e) { this.Text = this.Width.ToString(); } } }
verwende erhalte ich die wirkliche breite. Wie kann ich es, schaffen dass auch beim ersten code die richtige Breite ausgegeben wird
da ich die Breite in mehreren Methoden brauche.
Vielen Dank
- Bearbeitet Stefan6 Dienstag, 16. Juni 2015 17:08
Antworten
-
Hallo Stefan,
du legst dir eine Klassenglobale Variable an (hier "width"):public class Form1 : Form { private int width; public Form1() { this.InitializeComponent(); } private void Form1_Activated(object sender, EventArgs e) { this.width = this.Width; //Initial } private void Form1_SizeChanged(object sender, EventArgs e) { this.width = this.Width; //Update wenn sich die Fenstergröße ändert } }
In dem EventHandler "Form1_Activated" holst du dir die Breite mit der das Fenster initial erschienen ist. In "Form1_SizeChanged" holst du dir die neue Breite, wenn sich die Fenstergröße ändert.
Somit liegt die richtige Breite in einer Klassenglobalen Variablen "width", und du kannst diese innerhalb deiner Klasse überall benutzen.
Aber eigentlich müsstest du die Breite nicht separat sichern, da sich das Form die Breite ja bereits merkt. Innerhalb deiner Klasse ist die Breite jederzeit über "this.Width" greifbar. Du müsstest eigentlich gar nichts tun.
Ich hoffe, ich konnte dir weiterhelfen...
Viele Grüße Holger M. Rößler
- Bearbeitet Holger M. Rößler Dienstag, 16. Juni 2015 18:20
- Als Antwort markiert Stefan6 Dienstag, 16. Juni 2015 19:33
Alle Antworten
-
Hallo Stefan,
du legst dir eine Klassenglobale Variable an (hier "width"):public class Form1 : Form { private int width; public Form1() { this.InitializeComponent(); } private void Form1_Activated(object sender, EventArgs e) { this.width = this.Width; //Initial } private void Form1_SizeChanged(object sender, EventArgs e) { this.width = this.Width; //Update wenn sich die Fenstergröße ändert } }
In dem EventHandler "Form1_Activated" holst du dir die Breite mit der das Fenster initial erschienen ist. In "Form1_SizeChanged" holst du dir die neue Breite, wenn sich die Fenstergröße ändert.
Somit liegt die richtige Breite in einer Klassenglobalen Variablen "width", und du kannst diese innerhalb deiner Klasse überall benutzen.
Aber eigentlich müsstest du die Breite nicht separat sichern, da sich das Form die Breite ja bereits merkt. Innerhalb deiner Klasse ist die Breite jederzeit über "this.Width" greifbar. Du müsstest eigentlich gar nichts tun.
Ich hoffe, ich konnte dir weiterhelfen...
Viele Grüße Holger M. Rößler
- Bearbeitet Holger M. Rößler Dienstag, 16. Juni 2015 18:20
- Als Antwort markiert Stefan6 Dienstag, 16. Juni 2015 19:33
-
Hallo Stefan,
das Problem an deinem Code ist, dass die Variable breite beim erstellen der Form mit dem Wert von ActiveForm.Width befüllt wird. Wenn du später darauf zugreifst hat breite immer noch den Anfänglichen Wert von 300px obwohl sich die Breite mittlerweile vielleicht geändert hat.
Um die aktuelle Breite der aktiven Form zu bekommen musst du immer direkt auf ActiveForm.Width zugreifen:
this.Text = Form1.ActiveForm.Width.ToString();
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets