を分割します。C#の広場は、私は純粋な好奇心から、これをやっていると私は日のためにこれをやろうとしてきたが、私は立ち往生しているように見える
私は、次のやろうとしている:一瞬
を、私はちょうど広場の一つが無限に私はそれをクリックするたびに分割するために取得しようとしています。 ここで私が働いているコードです:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace divideSquare
{
public partial class Form1 : Form
{
private Button centerSquare = new Button();
private Button topLeftSquare = new Button();
private Button topRightSquare = new Button();
private Button bottomLeftSquare = new Button();
private Button bottomRightSquare = new Button();
public Form1()
{
InitializeComponent();
}
private void square_Click(object sender, EventArgs e)
{
topLeftSquare.Click += new EventHandler(topLeftSquare_Click);
//topRightSquare.Click += new EventHandler(topRightSquare_Click);
//bottomLeftSquare.Click += new EventHandler(bottomLeftSquare_Click);
//bottomRightSquare.Click += new EventHandler(bottomRightSquare_Click);
topLeftSquare.Size = new System.Drawing.Size(centerSquare.Height/2, centerSquare.Width/2);
topRightSquare.Size = new System.Drawing.Size(centerSquare.Height/2, centerSquare.Width/2);
bottomLeftSquare.Size = new System.Drawing.Size(centerSquare.Height/2, centerSquare.Width/2);
bottomRightSquare.Size = new System.Drawing.Size(centerSquare.Height/2, centerSquare.Width/2);
topLeftSquare.Location = new Point(0, 0);
topRightSquare.Location = new Point(50, 0);
bottomLeftSquare.Location = new Point(0, 50);
bottomRightSquare.Location = new Point(50, 50);
topLeftSquare.BackColor = Color.Red;
topRightSquare.BackColor = Color.Red;
bottomLeftSquare.BackColor = Color.Red;
bottomRightSquare.BackColor = Color.Red;
this.Controls.Add(topLeftSquare);
this.Controls.Add(topRightSquare);
this.Controls.Add(bottomLeftSquare);
this.Controls.Add(bottomRightSquare);
centerSquare.Dispose();
}
private void topLeftSquare_Click(object sender, EventArgs e)
{
topLeftSquare.Click += new EventHandler(topLeftSquare_Click);
//topRightSquare.Click += new EventHandler(topRightSquare_Click);
//bottomLeftSquare.Click += new EventHandler(bottomLeftSquare_Click);
//bottomRightSquare.Click += new EventHandler(bottomRightSquare_Click);
topLeftSquare.Size = new System.Drawing.Size(topLeftSquare.Height/2, topLeftSquare.Width/2);
topRightSquare.Size = new System.Drawing.Size(topLeftSquare.Height/2, topLeftSquare.Width/2);
bottomLeftSquare.Size = new System.Drawing.Size(topLeftSquare.Height/2, topLeftSquare.Width/2);
bottomRightSquare.Size = new System.Drawing.Size(topLeftSquare.Height/2, topLeftSquare.Width/2);
topLeftSquare.Location = new Point(0, 0);
topRightSquare.Location = new Point(10, 0);
bottomLeftSquare.Location = new Point(0, 10);
bottomRightSquare.Location = new Point(10, 10);
topLeftSquare.BackColor = Color.Red;
topRightSquare.BackColor = Color.Red;
bottomLeftSquare.BackColor = Color.Red;
bottomRightSquare.BackColor = Color.Red;
this.Controls.Add(topLeftSquare);
this.Controls.Add(topRightSquare);
this.Controls.Add(bottomLeftSquare);
this.Controls.Add(bottomRightSquare);
}
private void Form1_Load(object sender, EventArgs e)
{
centerSquare.Click += new EventHandler(square_Click);
centerSquare.Size = new System.Drawing.Size(50, 50);
centerSquare.BackColor = Color.Red;
this.Controls.Add(centerSquare);
}
}
}
しかし、私はすべてのボタンが意図した動作である(より小さく、小さくなりますが、それが唯一のものだった代わりに、それは分割されません四角をクリックするたびに1平方メートルのためにそれは4にまた薄切りにされることが期待された)。
ご協力いただければ幸いです。
****************************** EDIT *************** ***************問題を解決しニーニョスの答えは、へ
感謝します。 私はいくつかの掃除を行ったので、解決策を探している人にとっての主な結果がここにあります。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace divideSquare
{
public partial class Form1 : Form
{
private Random rnd = new Random();
private int _initHeight = 500;
private int _initWidth = 500;
private Button centerSquare = new Button();
public Form1()
{
InitializeComponent();
}
private void setSquareLocation(Button[] squareArray, Button senderSquare, int newHeight, int newWidth)
{
squareArray[ 0 ].Location = new Point(senderSquare.Left, senderSquare.Top);
squareArray[ 1 ].Location = new Point(senderSquare.Left + newHeight, senderSquare.Top);
squareArray[ 2 ].Location = new Point(senderSquare.Left, senderSquare.Top + newWidth);
squareArray[ 3 ].Location = new Point(senderSquare.Left + newHeight, senderSquare.Top + newWidth);
}
private void square_Click(object sender, EventArgs e)
{
Button topLeftSquare = new Button();
Button topRightSquare = new Button();
Button bottomLeftSquare = new Button();
Button bottomRightSquare = new Button();
Button senderSquare = sender as Button;
Button[] squareArray = { topLeftSquare, topRightSquare, bottomLeftSquare, bottomRightSquare };
int newSquareHeight = senderSquare.Height/2;
int newSquareWidth = senderSquare.Width/2;
foreach (var square in squareArray) {
square.Click += new EventHandler(square_Click);
square.Size = new Size(newSquareWidth, newSquareHeight);
square.BackColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
}
setSquareLocation(squareArray, senderSquare, newSquareHeight, newSquareWidth);
foreach (var square in squareArray) {
this.Controls.Add(square);
}
this.Controls.Remove(senderSquare);
}
private void Form1_Load(object sender, EventArgs e)
{
this.Width = _initWidth + 18;
this.Height = _initHeight + 40;
this.MaximumSize = new Size(_initWidth + 18, _initHeight + 40);
this.MinimumSize = new Size(_initWidth + 18, _initHeight + 40);
centerSquare.Click += new EventHandler(square_Click);
centerSquare.Size = new System.Drawing.Size(_initWidth, _initHeight);
centerSquare.BackColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
this.Controls.Add(centerSquare);
}
}
}
あなたはより多くの正方形、毎回を持って覚えておく必要があります。
は見てみましょう。私が使用してみましたしかし、なぜあなたのコードは、既存の四角形を変更している..あなたは私が作成したオブジェクトの最小数でこれを行うにしようとしていた、気づいたあなたが分割し、正方形を削除し、そして4つの新しいもの – BugFinder
のTiを交換する必要があり、それはです他の四角。私はあなたのヒントに従う必要があると思う、すべての正方形クリックして私はn + 3の正方形を作成し、元のクリックして処分する必要があります。 – Floaterz
さてあなたはちょうどあなたが始まっ1を縮小し、これは非常にいいです – BugFinder