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

クラスと名前空間に同じ名前を使用しない!?

どうやら、名前空間には、IfEditor クラスと同じ名前空間で名前がTriggerEditor.Forms付けられたクラスがあります。TriggerEditor

そのため、 を探すときTriggerEditor.UserControls.ExpressionControl、コンパイラはTriggerEditor名前空間ではなくクラス (同じ名前空間にあるため、より近い) を探しTriggerEditorます...

通常、それを避けるために名前空間エイリアス修飾子を使用しますが、Designer によって生成されたクラスでは、実際にはそれを制御できません。

于 2012-10-12T14:02:31.753 に答える