部分类并双击控件
Posted
技术标签:
【中文标题】部分类并双击控件【英文标题】:Partial Classes and double-click on control 【发布时间】:2012-08-24 12:34:47 【问题描述】:如果我在部分类中有一个函数(假设我有“按钮 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 中看到的问题,并且(对我而言)没有明显的方法来解决它。
有什么帮助吗?
【问题讨论】:
不,我同意,如果您拆分代码,它不会自动找到它,但是,如果您从原始 form.cs 文件中删除错误的一个,它将在另一个中选择正确的一个文件按预期进行,只是没有解析它以进行查找。 你为同一个表单创建一个新的部分类的原因是什么?我发现有必要创建第二个部分类的唯一一次是在使用 ORM 并需要扩展自动生成的类时。由于这两个部分都是应用程序的“视图”部分,因此分离事件处理程序似乎并不是必需的,因为它们共享相同的“关注点”(而不是关注点分离)。 【参考方案1】:那是因为您正在设计表单,而不是按钮。设计者期望(按照惯例)表单上控件的所有事件处理程序都位于表单的源代码中,而不是按钮的源代码中。当您认为(通常)button2.cs 可能应该定义一个名为 button2
的 类 时,这是有道理的,而不是其 Name 属性恰好是“Button2”的类 Button
的实例。
编辑:
部分类是为非常特定的目的而设计的——当一个类由设计者或其他代码生成器生成时,开发人员手动编辑该类通常是不安全的(因为代码生成器稍后会出现并覆盖文件,包括开发者的手写部分)。部分类允许将一个类拆分为两个文件——一个是生成的(在这种情况下是由设计者生成的),一个是用于手写代码的。因为类被定义为“部分”,编译器知道类的其他部分可能定义在其他文件中。
对于像您描述的那样具有多个不同功能领域的项目,我会将它们组织成与 UI 无关的类(以便功能可以独立进行单元测试),然后从 UI 类中调用它们需要。您应该研究诸如 Model-View-Controller 或 Model-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
【讨论】:
谢谢,但像往常一样,这会引出更多问题。 谢谢,但像往常一样,这会导致更多问题。这些按钮只是展示我认为的问题的一个例子。也许我错过了我应该如何使用“部分课程”。请注意,我是一个(非常!)老派程序员,所以对象、类、构造等对我来说并不容易。其次,可能远远超出了本主题的范围,您能否概述(简要)我应该如何组织一个具有 Windows 窗体、五个或六个选项卡的项目,每个选项卡都有自己的“类”功能(I/O、诊断,数据输入等)。每个选项卡都应该有自己的类函数吗? @user1408942 真棒应该意味着你接受这篇文章作为答案,如果你觉得它有帮助,也许可以投票。请参阅答案左侧的控件。以上是关于部分类并双击控件的主要内容,如果未能解决你的问题,请参考以下文章
Android - 防止edittext复制/粘贴并双击全选[重复]