我想构建一个构建一个函数,它确实返回一个已经存在的表单实例.
fx = getForm(Form1);
Run Code Online (Sandbox Code Playgroud)
在这里我得到错误'FensterTest.Form1'是'类型'但是像'变量'一样使用所以我需要一些投射,但我不知道我需要投射什么.
private Form getForm(Form f)
{
foreach (Form a in Application.OpenForms)
{
if (a is f)
{
f fx = (f)a;
return fx;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
无论我在哪里使用"f",我都会得到"找不到类型或命名空间名称'f'"
"f fx =(f)a;" 以前是"Form1 fx =(Form1)a"; 并且工作得很好,但因为我也需要使用Form2 Form3,...
您可能希望Form从OpenForms集合中找到指定类型的集合.所以你需要传入类型 - 你可以传入一个Type对象,或者你可以使方法通用,这样你就可以传入一个类型参数.在类型参数中发送的优点是您可以是类型安全的(返回您搜索的具体类型以备不时之需).这是一个通用的解决方案:
private TForm getForm<TForm>()
where TForm : Form
{
return (TForm)Application.OpenForms.OfType<TForm>().FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
注意,OfType并且FirstOrDefault是LINQ扩展方法,请确保导入System.Linq.像这样使用上面的方法:
Form f = getForm<Form1>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4505 次 |
| 最近记录: |