如何在其他方法中使用"控件.标记"?



我不熟悉使用Control.Tag。我只知道它可以分配给任何对象,但我不明白的是,我如何在另一个方法中调用它?我是新手,如果这个问题听起来很愚蠢,我深表歉意。

这个想法是创造一个能自行移动的enemyAI。问题是,我希望敌人的单位是通过代码创建的,而不是设计。我已经看到我可以使用for each control类型的代码和Control.Tag,但如果我在其他表单中调用它,我似乎无法使其工作。

我的问题是:我是把自定义方法controlloop()放在InitializeComponent()所在的表单中,还是可以放在其他地方?如果没有帮助,我该如何在表单中的所有方法上公开它?

(再次,我很抱歉这个问题听起来很愚蠢,但我希望从别人的经验中得到帮助,并学习它(

下面的代码是一个用于在控件中循环的自定义方法。

// checking controls
private void controlLoop()
{
// for each assigned control of all controls
foreach (Control ctrl in this.Controls)
{
// find 'picturebox' controls
if (ctrl is PictureBox)
{
// detect which one is which
switch (ctrl.Tag)
{
// if the picturebox is an enemy
case "Enemy":
EnemyAI(ctrl);
break;

default:
MessageBox.Show("Incorrect control type. Please assign it into controls first.");
break;
}
}
}
}

下面的代码是我试图解决的问题,但无法解决。我试着使用.left的位置,但在检查了所有控制后,我不明白该放什么来让敌方部队移动。

// Move the enemy
private void EnemyAI(Control ctrl)
{
ctrl.Tag.left += Xvel_enemy;
}

一个通用的"对象";没有左属性。然而,图片盒确实如此。

所以,在EnemyAI的变化:

ctrl.Tag.left += Xvel_enemy;

收件人:

PictureBox pb = (PictureBox)ctrl.Tag;
pb.Left += Xvel_enemy;

你应该很乐意去。

最新更新