我正在使用C#(Windows窗体)在Visual Studio中处理一个简单的菜单动画,并希望在实时时间内跟踪面板上的控件,在我的情况下是panel5
。这是代码示例:
void check()
{
if (panel5.Contains(panel3))
MessageBox.Show("3");
else
if (panel5.Contains(panel2))
MessageBox.Show("2");
else
if (panel5.Contains(panel4))
MessageBox.Show("4");
}
我不知道为什么,但它会一直弹出一个带有消息'2'的消息框。因此,函数check()
将始终检测到panel2
超过panel5
。每次触发这2个事件时我都会使用此方法:
private void PanuIntrareStanga_MouseEnter(object sender, EventArgs e)
{
posibilitate = 1;
backForth++;
timer2.Start();
check();
}
和这一个:
private void PanouIntrareDreapta_MouseEnter(object sender, EventArgs e)
{
posibilitate = 2;
backForth++;
timer2.Start();
check();
}
是否有方法可以解决此问题,并跟踪超过panel5
的控件?
答案 0 :(得分:2)
单独条件是不够的,因为你想映射所有东西 - 你需要循环父控件(panel5)并找到他所包含的类型面板的所有子控件,你也可以检查每个子控件和每个孙控制器等等...试着理解这个例子:
private void DiscoverPanels()
{
foreach (Control ctrl in panel5.Controls)
{
if (ctrl is Panel)
{
MessageBox.Show(ctrl.Name + " " + "is a child of panel5");
foreach (Control grandchild in ctrl.Controls)
{
if (grandchild is Panel)
{
MessageBox.Show(grandchild.Name + " " + "is a child of " + ctrl.Name);
}
}
}
}
}