2013-02-28 28 views
7

Ich habe mehrere Stapelüberlauf Fragen gelesen, ohne eine gute funktionierende Lösung für mein Problem zu finden. Wie kann ich die Größe meiner Steuerelemente ändern, wenn die Größe des Formulars geändert wird? Ich möchte, dass sie größer oder kleiner werden, wenn die Form größer oder kleiner wird.Größe ändern Kontrollen mit Formulargröße ändern

In Visual Basic war dies ziemlich einfach mit der form.Zoom-Eigenschaft (die eigentlich keine Größenanpassung erfordert, aber gelöst, was ich brauchte). Leider ist dies in C# winforms nicht verfügbar.

Hier ist einige andere Dinge, die ich ohne Glück versucht:

private void formMain_Resize(object sender, EventArgs e) 
{/* 
double scale; 
this.scaleWidth = (float)this.Width/(float)this.origWidth; 
this.scaleHeight = (float)this.Height/(float)this.origHeight; 
if (this.scaleHeight > this.scaleWidth) 
{ 
    scale = this.scaleHeight; 
} 
else 
{ 
    scale = this.scaleWidth; 
} 

foreach (Control control in this.Controls) 
{ 
    control.Height = (int)(control.Height * this.scaleHeight); 
    control.Width = (int)(control.Width * this.scaleWidth); 
    this.Refresh(); 
    // control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio); 
} 
///////This scaling didnt work for me either 
//this.Scale(new SizeF(this.scaleWidth, this.scaleHeight)); 
//this.Refresh(); 
*/ 
} 

Wenn ich eine actualy Arbeits Probe von Code auf einer anderen Stack-Überlauf Frage übersehe ich es sehen würde lieben, aber die, die ich gefunden waren denen ähnlich, die nicht arbeiten.

Vielleicht habe ich es missbraucht und jemand könnte Beispielcode posten, um für diejenigen von uns zu zeigen, die diese Frage stellen, wie man das Problem löst.

Auch habe ich versucht, einige der Anker/Docking-Tools zu verwenden, die denken, sie würden es automatisch zulassen, aber es tat es nicht.

+0

Sie haben Dock- und Ankereigenschaften verwendet ..... versuchen Sie sie besser zu verwenden .... sie sollten Ihr Schlüssel zum Erfolg sein, denke ich. Kann ich auch nach einem Screenshot Ihrer Benutzeroberfläche fragen? – Sandy

Antwort

1

Ich fand eine alternative Lösung, die gut für mich funktioniert, schätzen alle negativen oder positiven Kommentare zu der Lösung.

Mit mehreren Split Containern und Split Containern innerhalb von Split Containern in verschiedenen Regionen bin ich in der Lage, die primären Teile des Layouts abzuschneiden, und innerhalb davon mit Docking und Verankerung kann ich genau das erreichen, was ich machen wollte - es funktioniert wunderbar.

Ich würde darauf hinweisen, ich bin mir bewusst, dass einige Leute online erwähnen, Split-Container verwenden viele Ressourcen.

5

Verwenden Sie Anchor der Steuerung. Es gibt eine Option zum Verankern von oben, unten, links und rechts. Und du bist gut zu gehen.

+1

Er gibt an, dass er bereits Anker/Docks versucht hat. Die Frage impliziert auch, dass alle Steuerelemente einheitlich skaliert werden sollen. Das ist also nicht die Antwort auf die Frage. –

+0

Er könnte den Anker/Docks verwenden. Die Frage ist: Hat er es richtig benutzt? –

+0

Ich habe versucht, Anker und Dock und es scheint nur die Steuerelemente um "verschieben" auf Größe ändern, aber nicht die tatsächliche Größe der Steuerelemente – Kairan

1

Was Sie in Ihrem Code versuchen, ist es, die Größe der Steuerelemente zu ändern, die nicht so gut Ansatz ist. Im Allgemeinen sollte die Größe der Schaltflächen und Textfelder nicht geändert werden, wenn Sie das Formular neu formatieren, aber sie müssen sich häufig verschieben (Standort ändern). Einige Steuerelemente müssen die Größe entsprechend der Größe ändern und in den meisten Fällen nur eine Dimension. Die zentralen Steuerelemente, die für den Arbeitsbereich verwendet werden (wenn Sie beispielsweise das Werkzeug zum Zeichnen entwickeln), sollten die Größen beider Dimensionen ändern. All dies können Sie erreichen, indem Sie die Dock- und/oder Anchor-Eigenschaften der Steuerelemente richtig einstellen.

textBox1.Dock = DockStyle.Bottom; 
textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left; 

Alle diese Einstellungen können auch einfach im Eigenschaftenfenster vorgenommen werden, wenn Designer verwendet wird.

Aber wenn das für Sie in seltenen Fällen nicht genug ist, werden Sie auf jeden Fall wollen nur den Ort der Kontrolle ändern:

textBox1.Location = new Point(newX, newY); 
15

Die beste Möglichkeit ist, ein TableLayoutPanel zu verwenden. Setzen Sie TableLayoutPanel auf das Formular, legen Sie die Eigenschaft Dock auf Fill fest, erstellen Sie die erforderlichen Zeilen und Spalten, und fügen Sie die Steuerelemente in die Zellen ein. Natürlich müssen Sie Dock/Anchor auf den Steuerelementen in den Zellen festlegen, damit sie auf Änderungen der Zellengröße reagieren. In einigen Situationen müssen Sie möglicherweise Panel in eine Zelle einfügen und die Steuerelemente darin ablegen, da jede Zelle nur ein einziges Steuerelement enthalten kann. Möglicherweise müssen Sie auch RowSpan/ColumnSpan auf den Steuerelementen festlegen.

Mit einem TableLayoutPanel haben Sie die vollständige Kontrolle darüber, wie Ihre Cotrole angeordnet werden sollten. Sie können absolute oder prozentuale Größe für Zeilen und Spalten festlegen.

1

Wenn sich Ihre Steuerelemente in einem Gruppenfeld befinden, stellen Sie sicher, dass die Eigenschaften der Gruppenrahmen geändert werden. Kontrollen innerhalb der Box werden von der Box gesteuert. Die Boxgröße (außer es befindet sich in einer anderen Box) wird durch das Formular gesteuert.