Benutzer mit den meisten Antworten
Visual Basic 2013 / For schleife / Buttons Größe ändern

Frage
-
Hallo,
Ich möchte einen Taschenrechner schreiben. Jetzt sollen die Buttons "Zahl1 - Zahl9" beim verschieben der Form die Größe ändern.
me.width /5 - 1 Soll dabei die größe sein, wonach sich die Buttons orrientieren
Ich habe das mit einer For- Schleife probiert, aber leider nicht hinbekommen. Vllt kann mir newbe ja jemand helfen...
lg Stefan
Antworten
-
Hallo Stefan,
beim verschieben eines Formulars ändert sich aber nicht dessen Größe. Daher frage ich mich, wie sich die Buttons ändern sollen, wenn Sie von der Breite des Formulars abhängig sind!?
Ich nehme daher mal an, Du meinst nicht beim verschieben ders Formulars sondern bei dessen Größenänderung, oder?
Falls ja, häng dich das "Resize" Ereignis des Formulars und ändere dort die Buttoneigenschaften. Siehe dazu:
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.resize.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 13. September 2014 17:33
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 20. Oktober 2014 14:41
-
Hallo Stefan,
versuchen wir es mal ohne Schleife. Du schreibst nichts darüber ob es WPF oder Windows-Forms ist. Hier die Lösung für Windows Forms. WPF sollte leichter sein.
1. Plaziere ein Control vom Typ PanelLayoutPanel (Werkezeugkasten->Container) mit dem Namen TablelayoutPael1 auf der Form.
2. Stelle die Anzahl der Zeilen auf 4 die Anzahl der Spalten auf 3.
3.Setze die Anchor Eigenschaft dieses Panels auf Top,Button,left und Right.
4. Plaziere deine Buttons und benenne und Beschrifte diese. 0.9
5. Setzte pro Button die Eigenschaft Dock: Fill.
6. Setze in der Columns -Collection des LayoutPanels für alle Zeilen die Höhe 25%.
7. Setze in der Columns -Collection des LayoutPanels für alle Spalten die Breite 33.33%.Setzte im Form im Resize Event folgenden Einzeiler:
Me.TableLayoutPanel1.Width = (Me.Width / 5) - 1
Details zum Arbeiten mit dem TableLayoutPanel findest Du z.B. hier:
http://msdn.microsoft.com/de-de/library/dd492143.aspx
HTH
Grüße Alexander
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 13. September 2014 17:32
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 20. Oktober 2014 14:41
Alle Antworten
-
Hallo Stefan,
beim verschieben eines Formulars ändert sich aber nicht dessen Größe. Daher frage ich mich, wie sich die Buttons ändern sollen, wenn Sie von der Breite des Formulars abhängig sind!?
Ich nehme daher mal an, Du meinst nicht beim verschieben ders Formulars sondern bei dessen Größenänderung, oder?
Falls ja, häng dich das "Resize" Ereignis des Formulars und ändere dort die Buttoneigenschaften. Siehe dazu:
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.resize.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 13. September 2014 17:33
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 20. Oktober 2014 14:41
-
Hallo Stefan,
versuchen wir es mal ohne Schleife. Du schreibst nichts darüber ob es WPF oder Windows-Forms ist. Hier die Lösung für Windows Forms. WPF sollte leichter sein.
1. Plaziere ein Control vom Typ PanelLayoutPanel (Werkezeugkasten->Container) mit dem Namen TablelayoutPael1 auf der Form.
2. Stelle die Anzahl der Zeilen auf 4 die Anzahl der Spalten auf 3.
3.Setze die Anchor Eigenschaft dieses Panels auf Top,Button,left und Right.
4. Plaziere deine Buttons und benenne und Beschrifte diese. 0.9
5. Setzte pro Button die Eigenschaft Dock: Fill.
6. Setze in der Columns -Collection des LayoutPanels für alle Zeilen die Höhe 25%.
7. Setze in der Columns -Collection des LayoutPanels für alle Spalten die Breite 33.33%.Setzte im Form im Resize Event folgenden Einzeiler:
Me.TableLayoutPanel1.Width = (Me.Width / 5) - 1
Details zum Arbeiten mit dem TableLayoutPanel findest Du z.B. hier:
http://msdn.microsoft.com/de-de/library/dd492143.aspx
HTH
Grüße Alexander
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 13. September 2014 17:32
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 20. Oktober 2014 14:41
-
Hallo Stefan,
für den Fall eines Taschenrechners ist der Vorschlag von Alexander der einfachste und schnellste.
Es geht aber auch tatsächlich über eine Schleife aller Controls und deren Untercontrols.
Ich habe mal eine Klasse geschrieben vor längerer Zeit die ich heute in meinen WinForms
Projekten noch nutze und die sehr gut funktioniert.
- Im Load Ereignis durchlaufe ich alle Controls der WinForm inklusive aller Container die wiederrum
weitere Controls enthalten.
- Ich speichere den eindeutigen Namen und die Größe in Form eines Rectangles (Location und Size)
in einer HashTable.
- Ich merke mir die Größe der Form und im bspw. ResizeEnd Ereignis errechne ich das neue
Verhältnis zwischen Höhe und Breite zur vorherigen Fenstergröße, durchlaufe meine HashTable und
passe die Größe jeden Controls an.
Das ist natürlich erst einmal recht viel Arbeit, aber man kann dies ja in all seinen WinForms Projekten
nutzen.
Gruß
Jens