C# 多个.cs文件访问一个windows窗体

C# 多个.cs文件访问一个windows窗体,c#,winforms,C#,Winforms,为了更好地组织我的代码,我想将我的win表单拆分为多个*.cs文件 例如: 对于我放置在tabPage1中的所有元素,我希望能够从“Tab1.cs”访问它们 对于我放置在tabPage2中的所有元素,我希望能够从“Tab2.cs”访问它们 另外,当我在这些不同的页面中有多个文本框,并且我想生成一个动作时,例如,“Key up”,我想在特定的.cs文件(Tab1或Tab2)中有这些事件的定义 这是一种方法吗 您可以通过以下方式使大量代码远离表单: 使用数据绑定 注射服务 使用MVC模式 数

为了更好地组织我的代码,我想将我的win表单拆分为多个*.cs文件

例如:

  • 对于我放置在tabPage1中的所有元素,我希望能够从“Tab1.cs”访问它们
  • 对于我放置在tabPage2中的所有元素,我希望能够从“Tab2.cs”访问它们
另外,当我在这些不同的页面中有多个文本框,并且我想生成一个动作时,例如,“Key up”,我想在特定的.cs文件(Tab1或Tab2)中有这些事件的定义

这是一种方法吗


您可以通过以下方式使大量代码远离表单:

  • 使用数据绑定
  • 注射服务
  • 使用MVC模式
数据绑定

如果不使用数据绑定,则需要大量代码来用数据填充文本框、组合框和所有其他框。您还必须将数字转换为字符串

输入数据后,这些框的内容必须再次转换为数据。将字符串转换回数字是乏味的,而且容易出错

使用时,您将数据放入类中并放入属性中。然后将此数据对象(或视图模型)指定给绑定源,框和对象之间的转换将以两种方式自动完成

服务

表单应该只包含与事物显示方式密切相关的逻辑。例如,添加和配置控件(通常在*.Designer.cs文件中完成)、更改颜色或启用或禁用控件

业务逻辑(例如计算价格)应提取到服务类中。通过将这些服务注入表单构造函数,可以增加灵活性和可测试性。这最好通过接口来完成

公共部分类价格计算表单:表单
专用只读IPriceCalculator(价格计算器);
公共价格计算表(IPriceCalculator priceCalculator)
{
_价格计算器=价格计算器;
}
}    
这允许您注入不同版本的计算器,并且可以在单元测试中测试服务,而不涉及UI

MVC模式

您甚至可以更进一步,通过不绑定到纯数据类,而是绑定到视图模型类,从表单中删除更多逻辑。此类类通常实现
INotifyPropertyChanged
接口。使用此机制,当修改视图模型中的属性时,表单会自动更新

可以绑定到控件的任何属性。通常,您会将一个属性绑定到文本框的
文本
属性,但您还可以绑定到
可见
启用
背景色
属性。这允许您通过绑定来控制窗体的可视方面

这同样允许您通过引入控制器从表单中删除更多代码(请参阅)


控制器用作数据类、视图模型类(如果区分两者)之间的编排器,服务和表单。然后将服务注入控制器而不是表单。如果因此应用此模式,则表单仅包含设计器生成的代码。

您还可以创建UserControls 每个用户控件都有自己的文件 然后在选项卡中添加用户控件


与前一篇文章一样,尝试尽快将事件处理程序完成的作业提取到一个外部类(理想情况下,该类将位于一个专用的csproj中……它将有自己的unitTest csproj)

您可以使用用户控件,每个选项卡页一个,这是组织代码的一种非常基本的方法。如果您已经有了这些控件,甚至可以这样做。
TabControl:
|
├── tapPage1/
│   ├── Tab1.cs
└── tapPage2/
    ├── Tab2.cs