C# 在一个窗体中的多个用户控件之间导航
我有一个窗体和多个控件 假设我有一个表单,它应该包含一些控件 我尝试使用单个表单,并根据一些用例添加和删除控件 例如,这是我的表单类中的示例代码:C# 在一个窗体中的多个用户控件之间导航,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我有一个窗体和多个控件 假设我有一个表单,它应该包含一些控件 我尝试使用单个表单,并根据一些用例添加和删除控件 例如,这是我的表单类中的示例代码: private void AddToControlPanel(UserControl control) { this.panelControl.Controls.Add(control); this.panelControl.Tag = control; this
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();
}
但这对我不起作用。此外,我不喜欢我的方法
你能给我一个更好的方法吗?我也尝试过类似的方法,效果很好 表单中的代码:
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);
编辑:我的错,在控件中创建将被删除的CTLPiderVolucion没有意义。它应该在您的表单中实例化,并且还应该有对它的引用。因此,SwitchControls应该有更复杂的逻辑,可能有更多的参数,但这是可以使用的。也许您可以制作一个开关盒或其他东西,在表单中创建一个控件。我提醒您,这只是一个有效但非常糟糕的示例。您是否尝试过以先删除控件,然后添加新控件的方式切换这两个调用?或者您可以在表单中创建一个方法(您可以使用FindForm方法轻松找到该方法),用于切换作为参数传递的控件。mm这是怎么回事?我的意思是,我想到表单中的某个东西,它在关闭另一个控件后在表单中接收一个控件,这样就可以创建它,但我不知道怎么做。我将搜索有关FindForm()的内容调用Show()没有意义,当您将控件添加到父控件集合时,它将自动变为可见。所以,抓取你不喜欢的代码。只有一个错误,调用Remove()是一个非常严重的漏洞。您必须改用Dispose()。@HansPassant,但他可能想在代码中保留一些控件,然后将它们放回面板中,虽然这不是最好的方法,但我可以想象可能是这样。@Elviejo我编辑了您的问题,以便让其他人更好地理解您!