3

PDA의 InputPanel을 사용하여 사용자와 상호 작용하는 컨트롤을 개발했습니다. 코드의 관련 부분은 다음과 같습니다 :Compact Framework : 컨트롤에서 InputPanel을 사용하지 못했습니다.

namespace MyNamespace 
{ 
    // ... 
    using Microsoft.WindowsCE.Forms; 
    // ... 

    public class MyControl 
    { 
     // ... 
     public InputPanel MyPanel { get; set; } 
     // ... 
    } 
} 

이 때마다 나는 FormControl를 드래그하려고, 나는 다음과 같은 오류 얻을 : 나는 MyControl 내가 할 수에서 InputPanel 라인을 제거하면

System.IO.FileNotFoundException: Could not load file or assembly ‘Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=969db8053d3322ac’ or one of its dependencies. The system cannot find the file specified. File name: ‘Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac’

Form에 아무 문제없이 추가하십시오. 일단 Control이 추가되면 나는 그 라인을 다시 추가 할 수 있고 전체 프로그램은 컴파일되고 잘 동작한다.

디자이너에서 Control의 양식을 보자 마자 위와 유사한 오류가 발생하여 충돌이 발생하고 다른 Form에 다시 추가 할 수 없습니다.

Windows Mobile 6 SDK와 함께 Visual Studio 2008 SP1을 사용하고 있습니다.


제 질문은 다음과 같습니다. 유사한 문제가 발생했거나 해결 방법을 찾았습니까?


편집 : 부모 양식을 포기하고 속성으로 사용했습니다. 이 폼은 기본적으로 InputPanel getter와의 인터페이스 인 IInputPanel을 구현합니다. 그럼에도 불구하고 ctake의 답변은 정말 통찰력이 있었고 나를 XMTA에 소개했습니다.

답변

3

데스크톱에 SIP (입력 패널)가 없으므로 디자이너가 표시 할 수 없기 때문입니다. XMTA의 DesktopCompatible 속성을 false로 설정해야합니다.

편집 :이 답변을 연장해야한다고 생각합니다. DesktopCompatible 속성을 설정하면 디자이너가 속성을 직접 쿼리하지 못하지만이를 호출 할 수있는 컨트롤에 코드가있는 경우 (디자이너에서 실행되는 코드로 CE 관련 코드가 실행될 수있는 경우) 그것을 방지하기위한 코드. Environment.OSVersion.Platform을 통해 현재 플랫폼을 확인하는 것은 꽤 잘 작동합니다. 디자이너에 있는지 판단 할 수있는 더 복잡하고 복잡한 메커니즘이 있습니다.

+1

분명히 DesktopCompatible이 내가 만든 모든 컨트롤에 대해 false로 설정되었습니다. 따라서 DesktopCompatible을 false로 설정해도 문제가 해결되지 않았습니다. – xsl

+2

디자이너가 실행할 컨트롤의 어느 곳에서나 CE 관련 코드 (예 : SIP 표시)를 호출하고 있습니까? 정품 인증 중 SIP 표시 같은? 위의 편집을 참조하십시오. – ctacke

+2

나는 또한 당신의 코멘트에 다소 혼란 스럽습니다. 당신이 놀랐거나 모른 것처럼 "분명히"말합니다. XMTA 파일은 수동으로 생성해야합니다. Studio는 사용자를 대신하지 않으므로 설정해야 할 사항입니다. – ctacke