2009-05-15 5 views
1

에서 작동하지 않음 여전히이 클래스를 디자인 할 수 있습니다. 그렇게하기 위해 구체적인 수업을 만들 필요가 없었습니다. 그러나 아래에서와 같이 구체적인 클래스를 생성하면 해당 클래스는 디자이너에서 작동하지 않습니다. 클래스 중 어느 것도 그 안에서 설계되지 않을 수 있기 때문에 디자이너가 이 파일을 표시 할 수 없습니다콘크리트 구현 (나는 또한 DevExpress의 구성 요소를 사용하고 있습니다) 다음과 같이 정의 나 기본 클래스가 디자이너

:

public partial class ConcreteFormClass : BaseFormClass<StronglyTypedRow> 
{ 
    ... 
} 

나는이 메시지가 나타납니다. 디자이너가 파일에서 다음 클래스를 검사했습니다. ConcreteFormClass --- 기본 클래스 'BaseFormClass' 을로드 할 수 없습니다. 어셈블리가 참조되었으며 모든 프로젝트가 빌드되었는지 확인하십시오.

누구 하나 본 적이 있습니까? 어떤 종류의 알려진 해결 방법?

+0

나는 오래된 것을 알고 있지만 내 대답을 확인할 수 있는지 확인하십시오. –

답변

4

미안하지만이 작업은 효과가 없을 것입니다. (과거에는 당신도 이것을 할 수 있기를 바랐습니다.) 문제는 디자이너의 기본 방법입니다.

양식의 모델을 표시하기 위해 실제로 양식 자체를 구성하지는 않습니다. 그럴 경우 다른 문제가 발생합니다. 폼에 매개 변수없는 생성자가 없으면 어떻게 될까요? 대신 실제로 폼의 기본 클래스 인스턴스를 인스턴스화합니다. 그런 다음 사용자의 InitializeComponents() 메소드를 통해 스윕하고 기본 양식에 정의한 모든 컨트롤을 "레이어"합니다.

이렇게 작동하지 않는 이유는 분명합니다. BaseFormClass의 인스턴스를 디자인 할 수 있습니다.이 인스턴스는 구체화되기 때문에 XtraForm의 인스턴스를 만듭니다. 그러나 ConcreteFormClass의 인스턴스는 디자인 할 수 없으므로 BaseFormClass이라는 인스턴스를 만들어야합니다. 이는 추상적입니다.

가장 쉬운 방법은 BaseFormClass을 추상화하지 않는 것입니다. (아무도 만들 수 없다는 것을 확실히하고 싶다면 기본 생성자를 비공개로 만들 수 있습니까? 디자이너가 처리 할 수 ​​있는지 확실하지 않지만 왜 그렇게 할 수 없는지는 알 수 없습니다.) Sucks,하지만 그런 삶입니다. Microsoft에 불평하고 아마도 Visual Studio 2012에서 더 나을 것입니다.

+0

고마워요.하지만 이제는 조건부 컴파일을 사용하고, 클래스를 선회하고, 추상 멤버를 가상으로 바꾸려고했습니다. 나는 아직도 같은 메시지를 받고있다.내가 추상적으로 만든 이유는 인스턴스화를 방지하는 것이 아니라 구현이 구체적인 클래스에 종속적 인 추상 멤버가 있기 때문입니다. 그래도 빠른 응답 주셔서 감사합니다. – Dov

+0

나는 사후 클래스를 설계하지 않기 위해 사임했다. 필요한 것은 아니었고 아키텍처를 조금 변경해야했지만 완전히 나쁜 것은 아닙니다. 불가능을 시도하는 데 너무 많은 시간을 낭비하지 않도록 도와 주셔서 감사합니다. – Dov

+0

자세한 내용은 내 대답 –

0

디자이너가 추상 기본 클래스가있는 폼을 렌더링하게하는 것과 비슷한 것으로 들립니다. 나는 어떤 일반적인 멀티 상속도하지 않았지만 적어도 시도 할 수 my approach 그리고 그것이 작동하는지보십시오.

편집 : 예, 알았습니다. 시도해 봤지만 확실한 해결책은 확실합니다. 중간 클래스 정의와 양식 정의 (#if DEBUG에 싸여 있음)를 수정하면됩니다.

시도해 볼 수 있으면 알려주세요!

+0

그 시점에서 조건부 컴파일을 시도했음을 받아 들인 대답에 대한 초기 의견에서 언급했지만 그것은 디자이너를 사용할 수없는 것보다 더 불편했습니다. 제안 주셔서 감사합니다. 어쩌면 같은 질문을 가진 다른 누군가에게도 도움이 될 것입니다. – Dov

+0

내가 잘못 생각할 수도 있지만 조건부 컴파일은 어떻게 문제가됩니까? 아니면 그걸 작동시킬 수 없었습니까? 당신이 릴리스 모드에서 디자인 할 필요가 없으며 디버그 코드를 프로덕션으로 릴리스하지 않는 한 (당신은 shouldnt) 완벽하게 작동합니다 –