1

我在命名空间下定义了一个用户控件 ExpressionControl:

TriggerEditor.UserControls

我在命名空间下有一个表单“IfEditor”:

TriggerEditor.Forms

当我将我的控件实例添加到表单(将其命名为 expCondition)时,在设计器中生成以下代码来创建控件:

this.expCondition = new TriggerEditor.UserControls.ExpressionControl();

这会导致以下编译错误:

The type name 'UserControls' does not exist in the type 'TriggerEditor.Forms.TriggerEditor'

我不明白为什么它在“TriggerEditor.Forms.TriggerEditor”中寻找;这不是代码所说的。现在,我可以通过修改行来手动解决此错误,删除“TriggerEditor”。在“TriggerControls”之前,例如:

this.expCondition = new UserControls.ExpressionControl();

这满足了编译器的要求,但是我显然不想在每次将我的 ExpressionControl 的实例添加到表单时都这样做。我该如何避免这种情况?

4

2 回答 2

2

看起来您可能TriggerEditor在命名空间中有一个类TriggerEditor.Forms;是这样吗?

如果是这样,因为TriggerEditor该类在您当前的命名空间中,您“更接近”这个类,因此它正在寻找一个子类。

于 2012-10-12T13:58:05.233 回答
1

避免对类和命名空间使用相同的名称!?

显然,在 namespaceTriggerEditor.Forms中,您有一个TriggerEditor与 IfEditor 类在同一命名空间中命名的类。

因此,在查找 时TriggerEditor.UserControls.ExpressionControl,编译器会查找TriggerEditor类(在同一个命名空间中,因此更接近)而不是TriggerEditor命名空间......

通常,为避免这种情况,您将使用命名空间别名 qualifier,但在 Designer 生成的类中,您无法真正控制它。

于 2012-10-12T14:02:31.753 回答