0

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

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

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

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

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();
}

但这对我不起作用。另外我不喜欢我的方法。

你会建议我一个更好的方法来实现这一点吗?

4

1 回答 1

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 应该有一个更复杂的逻辑,也许还有更多的参数,但这是你可以使用的。也许您可以制作一个 switch-case 或其他可以在您的表单中创建控件的东西。我提醒您,这只是一个有效但非常糟糕的示例。

于 2012-10-21T21:00:24.720 回答