2009-10-20 2 views
4

나는 같은 클래스 선언이 : 나는 그것을 테스트하기 위해 손으로 추가복합 클래스 선언은 양식 디자이너를 혼란 스 킵니까?


public class Foo<T> : Panel where T : Control, IFooNode , new() 
{ 
    ... 
} 

,하지만 난 결국 양식 디자이너에 표시 할 수있는 무언가가 필요합니다. 양식 디자이너는이를 좋아하지 않는다, 그것은 말한다 :

 
Could not find type 'FooTestNameSpace.Foo'. 
Please make sure that the assembly that 
contains this type is referenced. 
If this type is a part of your development project, make 
sure that the project has been successfully built. 

흥미롭게도, 나는 또한 유사하지만, 내가 변수의 내 선언에 사용 된 제네릭 형식을 포함하는 경고를 얻을. 경고는 다음과 같습니다

Could not find type 'FooTestNameSpace.Foo<FooTestNameSpace.FooNodeType>'. 
Please make sure that the assembly that contains this type is referenced. 
If this type is a part of your development project, 
make sure that the project has been successfully built.

내 간단한 Form1 클래스의 선언은 다음과 같습니다

private FooTestNameSpace.Foo myFoo;

(FooNodeType 정말 아직 사용되지 않는 하나 개의 보조 속성이 라벨의 단지 서브 클래스이며 그것은 IFooNode을 구현 않습니다).

그래서 설정이 유형의 내 질문에 ..., 어떻게 적어도 푸 양식 디자이너에 표시 할 수 또는 수는 푸 합법적임을 인정하는거야? 이 처리 할 수있는 디자이너 특성이 있습니까? 내 Foo 컨트롤이 빈 상자로 나타나면 정말 신경 쓰지 않는다.

+2

디자이너는 간단한 끌어서 놓기 작업에 적합합니다. 보다 복잡한 클래스 시그니처에 대해서는 너무 많이 기대할 수 있습니다. –

+0

뷰 클래스로 수행하려는 작업을 정확히 설명하고 더 많은 코드를 표시하는 것이 더 도움이 될 수 있습니다. 사용하는 문장이 누락 된 것일 수도 있지만 스 니펫에서 말할 수는 없습니다. –

답변

7

, 나는 내가 해결책을 가지고 생각합니다. 폼 디자이너는 FooCtl을 처리 할 수 ​​없지만 ConcreteFooCtl에는 문제가 없습니다. 이상적인 해결책은 아니지만 적어도 실현 가능하다고 생각합니다. 어쩌면 VS의 다음 버전은 사용자가 폼에 일반 컨트롤을 추가 할 때 일반 형식을 지정하라는 메시지를 표시합니다.;)

+1

이 문제에 대한 올바른 해결책입니다. 1 년 전부터 동일한 문제가 있었지만 아직 다른 해결책을 찾지 못했습니다. –

1

Foo를 제네릭으로 만드는 대신, 제네릭이 아닌 일반형으로 만들고 필요로하는 일반 클래스를 포함하는 것이 좋습니다. 그런 다음 모든 처리를 양식에서 클래스로 위임 할 수 있습니다.



class ConcreteFooCtl : FooCtl<FooNodeType> 
{ 
} 

class FooCtl<T> : Panel where T : Control, IFooNode , new() 
{ 
} 

문제는 양식 디자이너가 어떤 일반적인 제어를 처리 할 수없는 것 같다 : 좋아

관련 문제