2017-01-05 6 views
0

Ich arbeite an einer Winforms-Anwendung mit MetroFramework. Ich möchte das Formular programmgesteuert so ändern, dass ein größeres Objekt darauf passt. Dazu benutze ich einen Toggle aus dem Framework in einemObjekt. Das Formular größer zu machen, funktioniert gut, aber wenn ich den Schalter deaktiviere, möchte ich das Formular nicht verkleinern.C# Ändern der Winforms funktioniert nicht richtig

private void tSynced_CheckedChanged(object sender, EventArgs e) 
{ 
    if (tSynced.Checked) 
    { 
     //Sync enabled 
     Console.WriteLine("Sync enabled"); 
     this.Size = new Size(this.Width + 300, this.Height); 
     this.MinimumSize = new Size(this.Width, this.Height); 
     this.MaximumSize = new Size(this.Width + 200, this.Height); 
    } else 
    { 
     //Sync disabled 
     Console.WriteLine("Sync disabled"); 
     this.Size = new Size(this.Width - 300, this.Height); 
     this.Width = 534; 
     Console.WriteLine(this.Size); 
     this.MinimumSize = new Size(this.Width, this.Height); 
     this.MaximumSize = new Size(this.Width, this.Height); 
    } 
} 

Wie Sie sehen Ich habe mit einigen Techniken zu experimentieren, die ich kenne, nur um es zu versuchen und meinen Weg von dort zurück, aber es scheint nicht zu funktionieren. Dies erscheint mir seltsam, da die erste Methode (this.Size) funktioniert, wenn man die Form vergrößert. Das Schlüsselwort this bezieht sich auf die Form nach Visual Studio. Es scheint nicht zu versuchen, die tabControl Größe zu ändern, weil ich das auf der rechten Seite gebunden habe und richtig mit der rechten Grenze einhergeht.

Das Protokoll für die this.Size wird den großen Wert zurückgeben, der in meinem Fall {Width=834, Height=354} ist.

Ich habe versucht, die Anfangswerte in einer Size Variable zu speichern und es von dort wiederherzustellen (da es für die Größenänderung durch den Benutzer Rechnung tragen würde), aber das scheint nicht richtig zu funktionieren.

Size oldSize; //Global variable 
private void initialize() 
{ 
    oldSize = new Size(this.Width, this.Height); 
    Console.WriteLine(oldSize); 
} 

this.Size = oldSize; //In the eventhandler 

Das Protokoll wird den richtigen Wert zurück, der {Width=534, Height=354} in meinem Fall ist. Aber es weigert sich, den Wert zu verwenden, wenn die this.Size Eigenschaft wieder eingestellt wird ...

Was übersehe ich?

Antwort

3

Wenn Sie das Formular vergrößern, legen Sie die MinimumSize auf die aktuelle Größe fest - aber wenn Sie es verkleinern, versuchen Sie, die Größe zurückgesetzt, während die MinimumSize noch festgelegt ist - also die Größe des Formulars nicht ändert.

Alles, was Sie tun müssen, ist, die MinimumSize vor dem Ändern der Größe zurückzusetzen.

+0

Eeewh, herpiederp! Ich wusste, dass es etwas Einfaches sein musste: p Funktioniert wie ein Zauber! Vielen Dank :) – MagicLegend

Verwandte Themen