在实时时间跟踪控件的位置

时间:2018-02-10 13:26:42

标签: c# winforms visual-studio

我正在使用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的控件?

1 个答案:

答案 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);
                }
            }
        }

    }
}