我有一个表单和多个控件。
假设我有一个表单,它应该包含一些控件。
我正在尝试使用单个表单,并根据某些用例添加和删除控件。
例如,这是我的表单类中的示例代码:
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();
}
但这不适合我。另外我不喜欢我的方法。
你能建议我更好地实现这个目标吗?
答案 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应该有一个更复杂的逻辑,也许更多的参数,但这是你可以使用的东西。也许你可以制作一个切换案例或者在你的表单中创建控件的东西。我提醒你,这只是一个有效但非常糟糕的例子。