naw*_*fal 4 c# winforms c#-2.0
我确信我的标题非常错误(随意使其正确),但示例代码将清除混乱.
我有这样的事情要做:
private void a_Click(object sender, EventArgs e)
{
if (abc = "cat")
return;
Form1 f = new Form1(abc);
f.ShowDialog()
}
private void b_Click(object sender, EventArgs e)
{
if (abc = "cat")
return;
Form2 f = new Form2(abc);
f.ShowDialog()
}
private void c_Click(object sender, EventArgs e)
{
if (abc = "cat")
return;
Form3 f = new Form3(abc);
f.ShowDialog()
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何通过传递表单类本身来编写单个方法来显示这些表单.或者我是否破坏了类和对象的概念?像这样的东西:
private void ShowForms(Form F)
{
if (abc = "cat")
return;
F f = new F(abc);
f.Showdialog();
}
Run Code Online (Sandbox Code Playgroud)
然后
private void a_Click(object sender, EventArgs e)
{
ShowForms(Form1); // I cant pass string abc from here..
}
Run Code Online (Sandbox Code Playgroud)
谢谢.我可以没有它,但如果我能拥有它,那将会有很大的帮助.
编辑:我稍微修改了我的例子,使我的要求更加清晰,因为第一个答案并没有完全解决我的问题.道歉.
编辑2:我的问题不是如何让我的程序运行(这将是太微不足道),而是如何通过传递形式作为参数(如上所述)精确地使用第三个常用函数来显示表单.
有一种方法可以做到这一点,但它变得更难,因为它看起来像你正在使用C#v2(来自问题上的标签).
更改您的ShowForms方法以接受Func可以Form使用提供的参数创建a实例的实例:
private void ShowForms(Func<string, Form> formCreator)
{
if (abc == "cat")
{
return;
}
Form form = formCreator(abc);
form.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以调用它来传递Func将用于创建每个单独的表单实例的实例:
private void a_Click(object sender, EventArgs e)
{
ShowForms(p => new Form1(p));
}
private void b_Click(object sender, EventArgs e)
{
ShowForms(p => new Form2(p));
}
Run Code Online (Sandbox Code Playgroud)
因为您使用的是C#v2,所以您还需要声明Func定义:
public delegate TResult Func<TParameter, TResult>(TParameter parameter);
Run Code Online (Sandbox Code Playgroud)
如果您可以使用更高版本的C#,则无需声明此最后一部分.但是,您需要使用更高版本的编译器来编译它(VS2010应该没问题) - 它正在利用编译器的更高版本理解lamda语法这一事实.
这样做的好处不仅仅是创建表单并将其传递给(例如ShowForms(new Form1(abc));),只有在需要对表单执行某些操作时才会创建表单.
| 归档时间: |
|
| 查看次数: |
7062 次 |
| 最近记录: |