Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Buttons mit for schleife erstellen
CamelxDD
myCSharp.de - Member



Dabei seit:
Beiträge: 16

Themenstarter:

Buttons mit for schleife erstellen

beantworten | zitieren | melden

Huhu,
Ich versuche mich gerade daran mit einer for schleife 3x3 buttons zu erstellen und auf eine Form zu bringen. Jedoch will es partout nicht funktionieren.
Kann mir bitte einer sagen warum?
Hier ist mein code:

    partial class Miner
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>

        public void InitializeComponent()
        {

            for (int i = 0; i ≤ 9; i++)
            {

                this.buttons[i] = new System.Windows.Forms.Button();
                this.SuspendLayout();

                this.buttons[i].Location = new System.Drawing.Point(x * 30, y * 30);
                this.buttons[i].Name = "button" + i.ToString();
                this.buttons[i].Size = new System.Drawing.Size(30, 30);
                this.buttons[i].TabIndex = 0;
                this.buttons[i].UseVisualStyleBackColor = true;
                if (x != 3)
                {
                    x++;
                }
                else if (x == 3)
                {
                    x = 0;
                    y++;
                }
                else if (x == 3 && y == 3)
                {
                    break;
                }                
            }

            // 
            // Miner
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 266);
            for (int i = 0; i ≤ 9; i++)
            {
                this.Controls.Add(this.buttons[i]);
            }
            this.Name = "Miner";
            this.Text = "Miner";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button[] buttons;
        int x = 0;
        int y = 0;
    }
}
Danke für eure Hilfe :)
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1069
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo CamelxDDD,

warum schreibst du den Code in InitializeComponent? Das sollte man so eigentlich nicht machen. Der Designer erzeugt dort Code und kann unter umständen zu Problemen führen. Im Designer => Rechtsklick => Code-Ansicht. Schreib dort den Code rein.

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo CamelxDDD,

herzlich willkommen auf myCSharp!

Trotzdem muss ich dich sofort zu Beginn auf [Hinweis] Wie poste ich richtig? hinweisen.
Zitat von CamelxDDD
Jedoch will es partout nicht funktionieren.
Kann mir bitte einer sagen warum?
Das ist eine denkbar ungünstige Fragestellung, s. Punkt 5 "Problem genau beschreiben, inkl. genauer Fehlermeldung". Was genau passiert bzw. passiert eben nicht?

Generell gilt: Verändere nie manuell den Code, der vom Designer erzeugt wird. Bei jeder Aktualisierung wird der nämlich mit dem neu generierten Code überschrieben.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
smoni
myCSharp.de - Member

Avatar #avatar-3549.png


Dabei seit:
Beiträge: 12

beantworten | zitieren | melden

ungefähr so...



    public partial class Form1 : Form {

        private System.Windows.Forms.Button[] _Buttons;

        public Form1() {
            InitializeComponent();

            initializeField();

        }

        private void initializeField() {

            this.SuspendLayout();

            int x = 0;
            int y = 0;

            //Magic happens here ;)
            _Buttons = new Button[9];

            for (int index = 0; index < 9; index++) {

                createButton(x, y, index);

                //Nicht schön... aber hoffentlich nachvollziehbar
                if (x < 2) {
                    x++;
                } else {
                    x = 0;
                    y++;
                }

            }

            this.ResumeLayout();

        }

        private void createButton(int X_, int Y_, int Index_) {

            this._Buttons[Index_] = new System.Windows.Forms.Button();


            this._Buttons[Index_].Location = new System.Drawing.Point(X_ * 30, Y_ * 30);
            this._Buttons[Index_].Name = "button" + Index_.ToString();
            this._Buttons[Index_].Size = new System.Drawing.Size(30, 30);
            this._Buttons[Index_].TabIndex = 0;
            this._Buttons[Index_].UseVisualStyleBackColor = true;
            
            this.Controls.Add(this._Buttons[Index_]);

        }
        
    }
        

geht aber noch eleganter...
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von smoni am .
(ja|nein|vielleicht)*
private Nachricht | Beiträge des Benutzers
chriscolm
myCSharp.de - Member



Dabei seit:
Beiträge: 112

beantworten | zitieren | melden

Zitat

//Nicht schön... aber hoffentlich nachvollziehbar
                if (x < 2) {
                    x++;
                } else {
                    x = 0;
                    y++;
                }

Das geht in die Hose. Du musst x solange inkrementieren, bis x % 3 = 0, dann haste 3 in einer Reihe, dann musste y einmal inkrementieren und x auf 0 stellen, um die nächste Reihe mit 3 Buttons zu füllen

Grüße

Christian
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo chriscolm,

deinem Vorschlag haut nicht wirklich hin, denn 0 % 3 wäre 0 und daher würde er nie in den ++x-Teil kommen, zumindest nicht, nachdem x das erste Mal auf 0 gesetzt wurde.

Dagegen sehe ich nicht, warum es x < 2 nicht tun sollte. Beim ersten Durchlauf ist x 0, beim zweiten 1 und beim dritten 2, weshalb er in den else-Teil geht und x wieder auf 0 zurücksetzt und y um eins erhöht. Alles paletti, oder?

herbivore
private Nachricht | Beiträge des Benutzers
smoni
myCSharp.de - Member

Avatar #avatar-3549.png


Dabei seit:
Beiträge: 12

beantworten | zitieren | melden

@chriscolm:
Zitat
//Nicht schön... aber hoffentlich nachvollziehbar
hatte seine Bedeutung ;)

@herbivore: Danke für die Argumentation :)

...mit Modulo... und schöner... und beliebiger ^^


        private void initializeField() {

            int buttonsInRow    = 5;
            int numberOfButtons = 13;

            int x = 0;
            int y = 0;

            this.buttons = new Button[numberOfButtons];

            for (int i = 0; i < numberOfButtons; i++) {

                x = i % buttonsInRow;
                y = i / buttonsInRow;

                createButton(i, x, y);

            }
        
        }
Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von smoni am .
(ja|nein|vielleicht)*
private Nachricht | Beiträge des Benutzers
CamelxDD
myCSharp.de - Member



Dabei seit:
Beiträge: 16

Themenstarter:

Thx

beantworten | zitieren | melden

Vielen Dank Smoni.
Hat mir Wirlkich geholfen!
Und so schlimm fand ich diesen Code nun auch wieder nicht

//Nicht schön... aber hoffentlich nachvollziehbar
                if (x < 2) {
                    x++;
                } else {
                    x = 0;
                    y++;
                }

Nochmals Danke
CamelxDDD
private Nachricht | Beiträge des Benutzers