[英]C# Open form using generics?
我有一个带有菜单的主窗体,该菜单包含很多项目,这些项目又打开了不同的窗体。 目前,我执行以下操作以打开特定表格:
if (canShowCustomerForm)
new CustomerForm().ShowDialog(this);
else
{
MessageBox.Show("You don't have enough rights to view this form.");
}
有没有一种方法可以在类中移动此代码,然后传递表单类型和布尔参数,而不是为每个菜单项重复代码?
public static class FormHelper
{
public static DisplayResult ShowForm<T>(IWin32Window owner, bool canShowForm)
where T : Form, new()
{
if (canShowForm)
{
using (T form = new T())
{
return form.ShowDialog(owner);
}
}
else
{
MessageBox.Show("You don't have enough rights to view this form.");
}
}
}
您可以将其提取到如下所示的函数中,而不是一遍又一遍地编写相同的逻辑:
void ShowFormIfAllowed<TForm>(bool allowed) where TForm : Form, new() {
if (allowed) {
using (var form = new TForm()) {
form.ShowDialog(this);
}
}
else {
MessageBox.Show("You don't have enough rights to view this form.");
}
}
然后,您可以在菜单处理中将其命名为:
ShowFormIfAllowed<CustomerForm>(canShowCustomerForm);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.