在一个表单中的多个用户控件之间导航

时间:2012-10-21 20:44:36

标签: c# .net winforms user-controls

我有一个表单和多个控件。

假设我有一个表单,它应该包含一些控件。

我正在尝试使用单个表单,并根据某些用例添加和删除控件。

例如,这是我的表单类中的示例代码:

private void AddToControlPanel(UserControl control)
        {
            this.panelControl.Controls.Add(control);
            this.panelControl.Tag = control;
            this.panelControl.Size = control.Size;
            this.panelControl.Dock = DockStyle.Fill;
            control.Show();
        }

上面的示例将控件添加到某个面板并显示它。

问题是我无法设置添加其他控件并删除当前控件。例如,如果某些登录控件成功进行身份验证,请删除登录控件本身并显示其他类似搜索框控件。

如何实现?

这是我到目前为止所尝试的:

if (LoginOK)
{
   //Add the next Control I want to load
   this.ParentForm.Controls.Add(new CtlPedirDevolucion());
   //Remove this actual control
   this.ParentForm.Controls.Remove(this);
}

...稍后会使用事件处理程序显示最新添加的控件:

private void FirstForm_ControlRemoved(object sender, ControlEventArgs e)
{
    this.Controls[this.Controls.Count - 1].Show();
}

但这不适合我。另外我不喜欢我的方法。

你能建议我更好地实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我尝试过类似的东西并且有效。

表单中的代码:

public void SwitchControls(Control removeCtrl, Control addControl)
{
     panel1.Controls.Remove(removeCtrl);
     panel1.Controls.Add(addControl);
}

您的控件中的代码:

MyForm frm = (MyForm)this.FindForm();
CtlPedirDevolucion newCtrl = new CtlPedirDevolucion();
newCtrl.Dosck = DockStyle.Fill;
frm.SwitchControls(this, newCtrl);

编辑:我的不好,没有必要在控件中创建一个将被删除的CtlPedirDevolucion。它应该在您的表单中实例化,并且还应该引用它。因此,SwitchControls应该有一个更复杂的逻辑,也许更多的参数,但这是你可以使用的东西。也许你可以制作一个切换案例或者在你的表单中创建控件的东西。我提醒你,这只是一个有效但非常糟糕的例子。