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 😃
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 | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Hallo CamelxDDD,
herzlich willkommen auf myCSharp!
Trotzdem muss ich dich sofort zu Beginn auf [Hinweis] Wie poste ich richtig? hinweisen.
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
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...
(ja|nein|vielleicht)*
//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
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
@chriscolm:
//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);
}
}
(ja|nein|vielleicht)*
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