我有一个.NET CF程序(在智能手机上运行),我已经为它编写了一个选项页面。
在选项页面上,我有6个其他表格的链接,其中包含实际选项。 当主窗体加载时,它会创建6个子窗体并将它们存储在准备启动的列表中。这个问题是制作这些表单所需的初始创建时间,这使得主要设置变得缓慢。
我理想的是,只需指定在加载时创建子表单所需的类型和参数,然后在需要时实际创建表单。
以下是目前工作原理的代码摘要:
Form_OnLoad():
AddSettingsOptions("General", new General());
AddSettingsOptions("Action Alert", new BaseAlertForm("Action Alert Settings", SystemManager.ActionAlert));
AddSettingsOptions("Comms Alert", new BaseAlertForm("Comms Alert Settings", SystemManager.CommsErrorAlert));
AddSettingsOptions("Advanced", new Advanced());
AddSettingsOptions("Diagnostics", new Diagnostics(_unitWatcher));
AddSettingsOptions("About", new About());
表单存储在列表的Tag部分(显示子选项)
private void AddSettingsOptions(String name, Form form)
{
listViewSettings.Items.Add(
new ListViewItem(
String.Format(" {0} {1}", listViewSettings.Items.Count + 1, name))
{
Tag = form
}
);
}
如果按下某个选项,则会调用以下函数来启动表单
private void ShowSubSetting(ListViewItem item)
{
if (item == null)
return;
object tag = item.Tag;
Form form = tag as Form;
if (form != null)
{
form.ShowDialog();
//form.Dispose();
}
}
我确信有一个非常简单的方法可以做到这一点,我只是在努力正确的方式。 感谢
答案 0 :(得分:2)
你可以这样做:
AddSettingsOptions("General", ()=> new General() );
AddSettingsOptions("Action Alert", ()=> new BaseAlertForm("Action Alert Settings", SystemManager.ActionAlert) );
// etc ...
void ShowSubSettings(ListViewItem item ){
if ( null == item ) { continue; }
object tag = item.Tag;
Func<Form> func = tag as Func<Form>;
if ( null != func ) {
Form frm = func();
if ( null != frm ) {
frm.ShowDialog();
}
}
}
如果您使用的是C#2.0,则必须使用
delegate { return new General(); }
而不是
()=> new General();