C# 创建同一类的多个按钮
我试图创建一个类C# 创建同一类的多个按钮,c#,winforms,C#,Winforms,我试图创建一个类ButtonControls的大约25个按钮,这些按钮继承了普通Button类,并使用嵌套的for循环创建一个正方形。我添加了名为coordsX和coordsY的特殊属性,我用来知道它们应该放在表单中的什么位置,以及其他一些太复杂而无法在这里解释的用途。当我创建一个按钮时,它被放置在应该的位置,并以文本的形式写下它的“坐标”,它显示正确的值,但是当我单击它时,messagebox应该弹出并给我这个按钮的坐标,但它总是显示上一个创建的按钮的坐标 private void Creat
ButtonControls
的大约25个按钮,这些按钮继承了普通Button
类,并使用嵌套的for
循环创建一个正方形。我添加了名为coordsX
和coordsY
的特殊属性,我用来知道它们应该放在表单中的什么位置,以及其他一些太复杂而无法在这里解释的用途。当我创建一个按钮时,它被放置在应该的位置,并以文本的形式写下它的“坐标”,它显示正确的值,但是当我单击它时,messagebox应该弹出并给我这个按钮的坐标,但它总是显示上一个创建的按钮的坐标
private void CreateBoard()
{
for (int x=0;x<BoardWidth;x++)
{
for (int y=0;y<BoardHeight;y++)
{
ButtonControls bc = new ButtonControls(x,y,PieceSize);
//bc.Name = x+"_"+y;
//bc.BackgroundImage = PieceBmp;
//bc.Size = new Size(PieceSize,PieceSize);
bc.Click += PieceButton_Click;
Point docks = new Point(20, 20);
docks.Offset(ButtonControls.coordsX, ButtonControls.coordsY);
bc.Location = docks;
Controls.Add(bc);
}
}
}
单击事件如下所示:
public ButtonControls (int X,int Y, int ButtonSize)
{
coordsX = X*ButtonSize;
coordsY = Y*ButtonSize;
Name = X+"."+Y;
BackColor = Color.White;
Size = new Size(ButtonSize,ButtonSize);
Font = new Font("Arial",6);
Text = coordsX + "." + coordsY;
}
public static int coordsX { get; set; }
public static int coordsY { get; set; }
private void PieceButton_Click (object sender,EventArgs e)
{
MessageBox.Show(ButtonControls.coordsX+"/"+ButtonControls.coordsY);
}
如何使其显示我单击的按钮的坐标?问题是您的坐标是静态的 移除
静态
ie
public int coordsX { get; set; }
public int coordsY { get; set; }
然后使用sender
实例而不是类来访问单击事件中的这些属性
private void PieceButton_Click (object sender,EventArgs e)
{
var button = (ButtonControls)sender;
MessageBox.Show(button.coordsX+"/"+ button.coordsY);
}
作为旁注,您的类名
ButtonControls
不是很好-为什么是复数ButtonControl
更好,但它仍然没有描述它与继承自的类之间的差异PieceButton
甚至更好(我不知道上下文,所以这只是一个猜测),但就我个人而言,我会将其称为Piece
。将您的发送者投射到BottonControls
以获得点击按钮
然后,要访问您的属性coordsX,coordsY,
,您必须删除static
关键字
public int coordsX { get; set; }
public int coordsY { get; set; }
private void PieceButton_Click (object sender,EventArgs e)
{
var button = (ButtonControls)sender;
MessageBox.Show(button.coordsX+"/"+ button.coordsY);
}
使用
sender
参数。将其强制转换为按钮控件