WinForms和子表单 - 如何合并冗余的“实用程序”代码?

时间:2011-05-08 16:03:34

标签: winforms namespaces .net-2.0 assemblies organization

我先搜索并搜索谷歌,以为某人之前肯定已经问过这个问题了,但我肯定找不到这个问题的好描述。

我有六个或八个类似的C#.NET 2.0 WinForms应用程序,这些应用程序使用主应用程序窗口的相当常见的模型构建,其中包含多个GUI数据字段以及用于进一步数据收集的几个模态对话框。许多数据字段(尤其是TextBoxes)具有相同的数据验证例程。我正在反复编写相同的xxx_Validating()例程,在最简单的情况下,只会大写输入文本的第一个字符(如果有的话)并重新显示结果。我有另一个邮政编码字段,它取5位数美国邮政邮政编码的前3位数字,并使用1000个成员的字符串数组返回相应的状态。简单的东西。还有其他一些;这是一个例子:

public void CapFirstCharTextBox_Validating(object sender, CancelEventArgs e)
{
    string strValue = ((TextBox)sender).Text.Trim();
    if (strValue.Length >= 1) {
        if (char.IsLower(strValue[0])) {
            strValue = strValue.Substring(0, 1).ToUpper() + strValue.Substring(1);
            ((TextBox)sender).Text = strValue;     // fires (whatever sender)_TextChanged()
        }
    }
}

这也是六个左右的“实用”程序的一部分。我每个对话框类只有一组这些,并且该对话框中需要它的所有各种TextBox都有它们的Validating事件指向同一个方法。所以它不像我在给定的源文件中有20个(每个TextBox一个)或其他任何东西;整个对话框类只有一个。

问题是,整套这些都存在于我需要的每个源文件中。这是主窗口的一个设置,每个弹出对话框的设置更多 - 这太多了。我理解模态对话框类不能相互通信,并且使所有这些东西全局化是最难以捉摸的,并且最坏的情况下是一个大的“禁忌”。

已成功尝试将对“FormMain”的引用(存在这些例程的一个副本)传递给各种对话框构造函数,然后使用自己的验证处理程序调用这些验证例程。它有效,但感觉非常笨重,当然不喜欢最好的方法。

那么,我(或者我想要)重新安排项目并更好地组织代码以便只有这些事情的单个实例?我如何连接这样的方法的全局“实用程序”类,以便我可以从主窗体的代码和一堆弹出模式对话框中获取它?

我想维护一个只有一个可执行文件,如果可能的话没有额外的.DLL(顺便说一下,这些都是每个项目的一个项目),如果可行的话,我希望能够进一步分享多个解决方案的通用代码。

我认为答案将包括编写新程序集,使用不同的名称空间(目前我在给定项目中的所有代码都包含在同一名称空间中),并且可能将这些东西分离到同一解决方案文件中的自己的项目中。 / p>

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以通过将代码保存在一个位置并在每个解决方案中添加指向该文件的链接来跨解决方案共享代码。

添加链接:右键单击要添加代码的项目(或文件夹),然后选择“添加现有项目”,浏览文件,找到后单击向下箭头在按钮上选择Link to。

这样,链接到该文件的项目将共享相同的代码。

BTW:使用不知道如何处理这些链接的源代码管理系统时要小心。