gpt4 book ai didi

c# - 多个 .cs 文件访问一个窗体

转载 作者:行者123 更新时间:2023-12-04 08:30:43 25 4
gpt4 key购买 nike

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

  • 对于我放置在 tabPage1 中的所有元素,我想从让我们说:“Tab1.cs”;
  • 对于我放置在 tabPage2 中的所有元素,我想从让我们说:“Tab2.cs”;

  • 此外,当我在这些不同的页面中有多个文本框并且我想生成一个操作时,例如“Key up”,我想在特定的 .cs 文件(Tab1 或 Tab2)中定义这些事件
    TabControl:
    |
    ├── tapPage1/
    │ ├── Tab1.cs
    └── tapPage2/
    ├── Tab2.cs
    这是一种方法吗?
    enter image description here

    最佳答案

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

  • 使用数据绑定(bind)
  • 注入(inject)服务
  • 使用 MVC 模式

  • 数据绑定(bind)
    如果不使用数据绑定(bind),则需要大量代码来用数据填充文本框、组合框和所有其他框。您还必须将数字转换为字符串。
    输入数据后,这些框的内容必须再次转换为数据。将字符串转换回数字很繁琐,容易出错。
    使用 Windows Forms Data Binding 时,你把你的数据放到一个类中放到属性中。然后将此数据对象(或 View 模型)分配给绑定(bind)源,框和对象之间的转换以两种方式自动完成。
    服务
    表单应仅包含与事物显示方式密切相关的逻辑。即,添加和配置控件(通常在 *.Designer.cs 文件中完成)、更改颜色或启用或禁用控件。
    业务逻辑,例如计算价格,应提取到服务类。您可以通过将这些服务注入(inject)表单构造函数来增加灵 active 和可测试性。这最好通过接口(interface)完成。
    public partial class PriceCalculationForm : Form
    private readonly IPriceCalculator _priceCalculator;

    public PriceCalculationForm(IPriceCalculator priceCalculator)
    {
    _priceCalculator = priceCalculator;
    }
    }
    这允许您注入(inject)不同版本的计算器,并且您可以在不涉及 UI 的情况下在单元测试中测试服务。
    MVC模式
    您甚至可以更进一步,通过不绑定(bind)到纯数据类,而是绑定(bind)到 View 模型类,从表单中删除更多逻辑。这样的类通常实现 INotifyPropertyChanged界面。使用这种机制,当 View 模型中的属性被修改时,表单会自动更新。
    您可以绑定(bind)到控件的任何属性。通常,您会将属性绑定(bind)到 Text文本框的属性,但您可以另外绑定(bind)到 VisibleEnabledBackColor属性,例如。这允许您通过绑定(bind)来控制表单的视觉方面。
    这再次允许您通过引入 Controller 从表单中删除更多代码(参见 Model–view–controller)
    Controller 用作数据类、 View 模型类(如果您区分两者)、服务和表单之间的协调器。然后将服务注入(inject) Controller 而不是表单。如果随后应用此模式,则表单仅包含设计器生成的代码。

    关于c# - 多个 .cs 文件访问一个窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65035744/

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