none
Visual Basic 2013 / For schleife / Buttons Größe ändern RRS feed

  • 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

    Donnerstag, 8. Mai 2014 09:48

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

    Donnerstag, 8. Mai 2014 10:17
    Moderator
  • 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


    Donnerstag, 8. Mai 2014 10:20

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

    Donnerstag, 8. Mai 2014 10:17
    Moderator
  • 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


    Donnerstag, 8. Mai 2014 10:20
  • 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

    Donnerstag, 8. Mai 2014 18:57