【发布时间】:2017-04-10 11:05:29
【问题描述】:
我这样做纯粹是出于好奇,而且我已经尝试了好几天,但我似乎被卡住了。
我正在尝试执行以下操作:
目前,我试图让其中一个方块在我每次单击时无限分裂。 这是我正在处理的代码:
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 );
}
}
}
但是每次我点击一个正方形时,它都不会分裂,而是所有按钮都变得越来越小(这是预期的行为,但它只适用于一个正方形,并且预计也会被切成 4 个) .
任何帮助将不胜感激。
****************************** 编辑 ****************** **************
非常感谢尼诺斯的回答,解决了这个问题。 我做了一些清洁工作,所以对于那些也在寻找解决方案的人来说,这是主要结果。
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 );
}
}
}
【问题讨论】:
-
你需要记住,你每次都有更多的方块。但是您的代码正在更改现有的正方形..您需要删除分割的正方形,并将 ti 替换为 4 个新正方形
-
我注意到,我试图用最少数量的对象来做到这一点,这就是我尝试使用其他方块的原因。我想我需要听从你的提示,对于每个点击的方块,我需要创建 n+3 个方块并处理原来点击的方块。
-
你不需要创建 n+3,只需缩小你开始的 1 并添加 3 个