gpt4 book ai didi

c# - 如何将表单作为参数传递给方法? (C#)

转载 作者:太空狗 更新时间:2023-10-30 00:44:53 26 4
gpt4 key购买 nike

我确定我的标题错得离谱(请随意改正),但示例代码会消除混淆。

我有这样的事情要做:

    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()
}

现在我如何编写一个方法来通过传递表单类本身来显示这样的表单。还是我破坏了类和对象的概念?像这样:

   private void ShowForms(Form F)
{
if (abc = "cat")
return;

F f = new F(abc);
f.Showdialog();
}

然后

    private void a_Click(object sender, EventArgs e)
{
ShowForms(Form1); // I cant pass string abc from here..
}

谢谢。没有它我也能活下去,但如果我能拥有它会很有帮助。

编辑:我稍微修改了我的示例以使我的要求更清楚,因为第一个答案并没有完全解决我的问题。抱歉。

EDIT2:我的问题不是如何让我的程序运行(那太微不足道了),而是如何通过将表单作为参数传递(如上所述)来精确地使用第三个常用函数来显示表单。

最佳答案

有一种方法可以做到这一点,但它变得更难,因为它看起来像你使用的是 C# v2(从问题的标签)。

更改您的 ShowForms 方法以接受 Func 的实例,该实例可以使用提供的参数创建 Form 的实例:

private void ShowForms(Func<string, Form> formCreator)
{
if (abc == "cat")
{
return;
}

Form form = formCreator(abc);
form.ShowDialog();
}

然后您可以调用它传递一个 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));
}

因为您使用的是 C# v2,所以您还需要声明 Func 定义:

public delegate TResult Func<TParameter, TResult>(TParameter parameter);

如果您可以使用更高版本的 C#,则不需要声明这最后一部分。 然而,您将需要使用更高版本的编译器来编译它(VS2010 应该没问题)——它利用了更高版本的编译器理解 lamda 语法这一事实。

这样做的好处不是仅仅创建表单并将其传入(例如 ShowForms(new Form1(abc));)是表单只会在您需要时创建用它做点什么。

关于c# - 如何将表单作为参数传递给方法? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com