2015-11-28 12 views
5

Ich soll ein magisches Quadrat in 2D mit Windows Forms Application erstellen. Es soll wie folgt aussehen:Wie erstellt man ein magisches Quadrat mit Windows Forms?

Image of 3x3 magic Square with numbers and grid shown.

Allerdings sollte der Benutzer in der Lage, die Größe des Platzes (3x3, 5x5, 7x7, usw.) zu entscheiden. Ich habe den Code bereits in einer Konsolenanwendung geschrieben, aber ich weiß nicht, wie ich die 2D-Grafiken hinzufügen soll.

Jemand hat diese Frage schon gestellt (How do I put my result into a GUI?), und eine der Antworten war, DataGridView zu verwenden, aber ich bin mir nicht sicher, ob das ist, was ich suche, da ich es nicht wie das Bild aussehen lassen kann.

Irgendwelche Ideen oder Ratschläge?

+0

Sie können ein 'TableLayoutPanel' verwenden und dem Panel dynamisch Schaltflächen hinzufügen. –

Antwort

6

können Sie einen TableLayoutPanel verwenden und Schaltflächen Panel hinzuzufügen. Wenn Sie keine Interaktion mit Schaltflächen benötigen, können Sie stattdessen Label hinzufügen.

erstellen Platz dynamisch:

public void CreateSquare(int size) 
{ 
    //Remove previously created controls and free resources 
    foreach (Control item in this.Controls) 
    { 
     this.Controls.Remove(item); 
     item.Dispose(); 
    } 

    //Create TableLayoutPanel 
    var panel = new TableLayoutPanel(); 
    panel.RowCount = size; 
    panel.ColumnCount = size; 
    panel.BackColor = Color.Black; 

    //Set the equal size for columns and rows 
    for (int i = 0; i < size; i++) 
    { 
     var percent = 100f/(float)size; 
     panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, percent)); 
     panel.RowStyles.Add(new RowStyle(SizeType.Percent, percent)); 
    } 

    //Add buttons, if you have your desired output in an array 
    //you can set the text of buttons from your array 
    for (var i = 0; i < size; i++) 
    { 
     for (var j = 0; j < size; j++) 
     { 
      var button = new Button(); 
      button.BackColor = Color.Lime; 
      button.Font = new Font(button.Font.FontFamily, 20, FontStyle.Bold); 
      button.FlatStyle = FlatStyle.Flat; 

      //you can set the text of buttons from your array 
      //For example button.Text = array[i,j].ToString(); 
      button.Text = string.Format("{0}", (i) * size + j + 1); 
      button.Name = string.Format("Button{0}", button.Text); 
      button.Dock = DockStyle.Fill; 

      //If you need interaction with buttons 
      button.Click += b_Click; 
      panel.Controls.Add(button, j, i); 
     } 
    } 
    panel.Dock = DockStyle.Fill; 
    this.Controls.Add(panel); 
} 

Wenn Sie Interaktion müssen mit den Tasten

void button_Click(object sender, EventArgs e) 
{ 
    var button = (Button)sender; 
    //Instead put your logic here 
    MessageBox.Show(string.Format("You clicked {0}", button.Text)); 
} 

Als Beispiel können Sie

CreateSquare(3); 

Screenshot nennen:

enter image description here

+0

Vielen Dank! Dies funktioniert perfekt für ein 3x3 Quadrat. Wenn die Größe jedoch unterschiedlich ist (5x5, 7x7), erhalte ich unterschiedliche Ergebnisse. Die "for-Schleife" scheint in Ordnung zu sein, also weiß ich nicht, warum ich diese Ausgabe bekomme. – Jack

+0

Mein schlechtes. Es zeigt die Zahlen korrekt an, ich musste nur das Fenster vergrößern, um die ganze Zahl zu sehen (anstatt "24" zu sehen, würde ich nur "2" sehen). Danke noch einmal! – Jack

+0

@Jack Sie sind willkommen, Ja, Sie können Fenster größer machen oder die Schrift verkleinern :) –

3

Sie ein Formular erstellen und ein Table mit dieser Eigenschaft

tableLayoutPanel1.Dock = DockStyle.Fill; 
tableLayoutPanel1.BackColor = Color.Gold; 

hinzufügen und das ist das Ergebnis

enter image description here

Wenn Sie Zeile und Spalte zu erstellen, korrekt den Prozentsatz festgelegt passen auf diese Weise:

enter image description here

Danach können Sie eine Schaltfläche oder ein Label in jedem Quadrat hinzufügen. dynamisch

enter image description here

Verwandte Themen