如何将代码从主窗体类中分离出来?

How do I go about separating code away from the main form class?

提问人:Guy 4678 提问时间:9/3/2023 更新时间:9/3/2023 访问量:51

问:

我只是 C# 的新手,但有一个项目在旅途中,遇到了一些麻烦。

我正在尝试遵循(我已知的)最佳实践,并希望尽早掌握这一点。

下面是一个非常简化的示例。我想提取方法,最好是提取到另一个文件,但无法确定范围恢复到原始形式。

namespace form_and_separate_class
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = GetText();
        }
        
        public void button2_Click(object sender, EventArgs e)
        {
            SetText();
        }

        public string GetText()
        {
            return "text111";
        }
        public void SetText()
        {
            textBox1.Text = "Text222";
        }
    }
}

我想把 GetText() 和 SetText() 方法拿出来,把它们放在其他地方,但仍然可以让它们工作。

我已经在网上和youTube上做了很多事情,但对我来说,这一切似乎都有点过于复杂了。有没有人有任何关键字(我以为是方法提取),我需要谷歌,或者可以在上面的示例中扔几行。

我试图定位的表单实际上是我通过“表单 form1 = new Form();即使智能识别它,我也无法让任何东西工作

多谢!

我只是想学习并克服路上的这个小坎坷

C# 窗体 方法 范围

评论

0赞 Fildor 9/3/2023
您实际要做的是将该 ui 控件的 text 属性绑定到视图模型的 text 属性。查看 learn.microsoft.com/en-us/dotnet/desktop/winforms/data/...
0赞 dr.null 9/3/2023
分部类和方法。SO 示例

答:

-1赞 IFrank 9/3/2023 #1

如果 SetText() 和 GetText() 方法归您的 Form 所有,并且您面向的特定文本框采用该表单,我认为您不能将这些方法放在其他地方(或者我可能不明白这个问题)。

如果只需要将代码分部分组织,可以查看 C# 区域。

另一种选择是使这些方法泛型,例如:

public void SetText(TextBox textbox, string text)
{
    textbox.Text = text;
}

public string GetText(TextBox textbox)
{
    return textbox.Text;
}

这样,您可以将这些方法放在另一个类(可能是静态类)中,并使用它们在表单文件的顶部添加 using 指令。

请尝试提供更多详细信息,如果需要,我会更新我的答案。

评论

0赞 Guy 4678 9/3/2023
是的,带有代码的第二个选项似乎是首选。我确实尝试调用一个方法并将表单作为对象参数传递给外部方法,但我不确定它是否有效。这种方法是否允许我使用原始主窗体上声明的方法?这就是我的总体目标,我很确定。谢谢。对不起,我什至不能支持你的答案。哈哈
0赞 IFrank 9/3/2023
@Guy4678 很高兴它帮助了你。我强烈建议你看一下面向对象编程的基础知识。如果您先学习基本的编程概念,学习编程语言确实很有意义。如果您需要更多帮助,请告诉我,我仍然不确定是否正确理解了您的问题,因为它非常通用。