2

如果我在部分类中有一个函数(假设我有“按钮 2”单击处理程序),然后在表单设计器中双击“按钮 2”,Intellisense(或现在负责的任何东西)总是把我扔到“Form1.cs 模块”(在定义不明确的行或空白行处),而不是新的部分类模块“Button2.cs”。双击“Button1”会执行“正确”操作。

例如:

在“Form1.cs”中:

namespace test01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Button 1 pressed");
        }

    }
}

在“Button2.cs”(公共部分类)中:

namespace test01
{
    public partial class Form1 : Form
    {


        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Button 2 pressed");
        }
    }
}

这是我在 VS2008 和现在在 VS2010 中看到的,并且(对我而言)没有明显的方法来解决它。

有什么帮助吗?

4

1 回答 1

1

那是因为您正在设计表单,而不是按钮。设计者期望(按照惯例)表单上控件的所有事件处理程序都位于表单的源代码中,而不是按钮的源代码中。当您认为(通常)button2.cs 可能应该定义一个名为的,而不是其 Name 属性恰好是“Button2”button2的类的实例时,这是有道理的。Button

编辑:

部分类是为一个非常特定的目的而设计的——当一个类由设计者或其他代码生成器生成时,开发人员手动编辑该类通常是不安全的(因为代码生成器稍后会出现并覆盖文件,包括开发者的手写部分)。部分类允许将一个类拆分为两个文件——一个是生成的(在这种情况下是由设计者生成的),一个是用于手写代码的。因为类被定义为“部分”,编译器知道该类的其他部分可能在其他文件中定义。

对于像您描述的具有多个不同功能区域的项目,我会将它们组织到与 UI 无关的类中(以便可以对功能进行独立的单元测试),然后根据需要从 UI 类中调用它们。您应该研究诸如Model-View-ControllerModel-View-ViewModel设计模式之类的概念,以了解其工作原理。

像这样的文件夹结构作为起点不会不合理:

Root
|-GUI           // Contains folders related to GUI elements
| |-Forms       // Contains your forms
| |-Controls    // Contains any custom controls
|-Common        // Contains folders for common functionality
| |-IO          // Contains classes relating to I/O
| |-Diagnostics // Contains classes relating to diagnostics
|-Logic         // Contains classes folders to specific business use cases
  |-UseCase1    // Contains classes folders to use case #1 (use a better name, obviously)
  |-UseCase2    // Contains classes folders to use case #2
于 2012-08-29T20:16:13.717 回答