好了,所以我有一個表格,我構建將改變它的界面通過使用自定義的控件。我想要做的是在創建新控件之前進行幾次檢查,例如檢查是否已經啓動。我有一切正常工作,但我似乎無法動態地創建新的控制,沒有創建它之前運行檢查失敗的目的。創建控件的新實例動態
的控件都實現所謂ICustomControl的接口,並從MasterControl繼承。然後,我有叫JobForm自定義控件,和主窗體上按鈕調用像這樣的方法:Check_Controls(newJobForm)
JobForm newJobForm;
private void Check_Controls(Control control) // Checks current controls to see if a new one can be opened
{
bool currentControl = false;
foreach (Control c in this.Controls)
{
if (c is ICustomControl && c != masterControl)
currentControl = true;
}
if (currentControl)
{
TimedMessageBox timedMessage = new TimedMessageBox("There is currently an open form. Please close the current control before opening another.");
timedMessage.ShowDialog();
}
else
{
Control c = (Control)Activator.CreateInstance(control.GetType());
this.Controls.Add(c);
Position_Control(c);
c.Show();
}
}
我dont't要創建一個類似的自定義控件的新實例:JobForm newJobForm = new JobForm();
運行前檢查方法,我想傳遞檢查方法的引用,然後讓它在檢查完成後創建新實例。通過這種方式,無論我在添加到應用程序中添加了多少新的自定義控件,我只需要創建一個參考變量,然後爲該按鈕調用check方法並將其傳遞給參考。
任何人都知道我該怎麼做?
如果我沒有理解你正確的,那就是我已經在做的事......也許你不明白我想要完成什麼。我有很多按鈕,每個按鈕打開一個不同的控件,但我不想要任何重疊的控件,我只想要一次打開一個控件...因此,我正在檢查是否有任何控件當前打開,如果他們告訴用戶不,並且他們是否打開控制。很多代碼都是相同的,所以我試圖將它凝聚成一個簡單的方法,打開傳遞給它的任何控制。 –
對,我說你應該將支票與創作分開。某處您已經創建了這些實例以傳遞到您的現有函數中。我建議的是讓你的函數只進行檢查,而不是創建,並且如果控件創建有效,就讓它返回一個bool。如果它是有效的,那麼可以使用現有的創建邏輯。 – brcpar
啊,呀我想過這樣做,我只是希望,而不必寫出來的每個創作有一個辦法凝結那魔成一個通用的方法。 –