我有一個窗體和多個控件。在多個用戶控件之間導航一種形式
說我有一個表單,它應該包含一些控件。
我正在嘗試使用單個窗體並根據某些用例添加和刪除控件。
例如,這是在我的形式類的樣本代碼:
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();
}
但是這不是爲我工作。另外我不喜歡我的方法。
你會建議我一個更好的方法來實現這個請嗎?
您是否嘗試以您首先刪除控件然後添加新控件的方式切換兩個呼叫?或者你也許可以在你的Form中創建一個方法(你可以很容易地使用FindForm方法找到)來切換作爲參數傳遞的控件。 –
毫米將如何?我的意思是,我在表單中的某個東西上想過,在關閉另一個表單後收到一個控件,所以可以創建它,但我不知道該怎麼做。我將搜索一些關於FindForm()的信息 –
調用Show()沒有意義,當您將其添加到父級Controls集合時,控件會自動變爲可見。因此,劃傷你不喜歡的代碼。只是一個壞的錯誤,調用Remove()是一個非常討厭的泄漏。你**必須**使用Dispose()。 –