好了,所以我有一个表格,我构建将改变它的界面通过使用自定义的控件。我想要做的是在创建新控件之前进行几次检查,例如检查是否已经启动。我有一切正常工作,但我似乎无法动态地创建新的控制,没有创建它之前运行检查失败的目的。创建控件的新实例动态
的控件都实现所谓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
啊,呀我想过这样做,我只是希望,而不必写出来的每个创作有一个办法凝结那魔成一个通用的方法。 –