5

因此,我刚刚开始开发 C# WinForm 应用程序,我从事的每个项目似乎都更大,需要更多的用户功能。如果我将所有功能添加到一个表单中,显然它会很快失控。我的上一个项目我会将功能划分为单独的表单,每当有人说想要执行“Feature1”时,我都会实例化 Feature1 表单并将其显示为与主表单作为其所有者的对话框(因此他们无法单击它)。

我只是好奇还有哪些其他方法可以在 Forms 中组织代码。如果您被迫在一个表单上拥有大量特性/功能,是否有一种保持项目井井有条的好方法?我只是讨厌拥有数百/数千行长的代码文件。

答案可能只是在设计中,尝试预先设计 UI,以便您可以利用多种形式?

我遇到的另一个例子。我创建了一个选项卡控件并有大约 5 个选项卡。这 5 个选项卡具有大量功能,并且都存储在同一个 CS 文件中。我还有什么其他选择?创建一个新的自定义 TabControl 类,其中包含我为该选项卡提供的特定功能?

我不介意阅读,所以如果那里有不错的文章,请随时链接它们!

4

4 回答 4

4

首选方法是 Controller/Presenter。这个想法是,窗口应该只负责实际处理其控件的 UI 事件,并且应该通过调用为窗口执行实际工作的控制器上的方法来做到这一点。窗口可以具有必要的处理程序,也可以将 UI 事件直接链接到控制器方法;前者通常是更简单的方法,但它可能很容易在此处或那里潜入一行真正应该在 Controller 方法中的代码。通过这样做,您将 Form 类中的布局和表示逻辑与 Controller 中的业务逻辑分开。

Mark Hall 对用户控件的建议也是一个很好的建议。通过为选项卡或常见的 UI 控件组合创建 UserControl 类,您可以从主窗体的代码中切断负责布局 UI 的那部分的逻辑,然后控件只是“插入”并且窗口可以在很多情况下使用它更简单的方法。这是实现自定义但可重用控件的必要条件;DRY 的基本原则是,如果你在两个不同的地方有两行代码,对两个不同但可互换的东西做同样的工作,那么这些代码行应该合并到一个地方。

于 2012-08-20T22:33:39.073 回答
2

我在我的项目中使用 UserControls将功能分组到单独的对象中,然后可以将这些对象添加到您的表单中。

于 2012-08-20T22:31:44.880 回答
1

我倾向于按照建议将我的逻辑代码从 UI 中分离出来。如果您这样做,您需要对跨应用程序进行调用的方式保持谨慎,以避免出现跨线程异常。我被教导创建委托和事件以从逻辑类更新 UI,但MSDN当然也有很多关于进行线程安全调用的信息。

于 2012-08-20T23:38:15.307 回答
0

我知道这是一个迟到的答案,但如果有人仍然阅读这个问题,另一种减少表单中代码行数的方法是使用Data Bindings。如果您正在使用属性,数据绑定可以做到这一点,这样您就不必经常编写处理程序来执行类似PropertyName = textBox.Text;. 数据绑定适用于数据集和对象。

于 2018-07-17T12:30:16.567 回答