3

Я разработал элемент управления, в котором используется InputPanel КПК для взаимодействия с пользователем. Соответствующая часть кода ниже:Compact Framework: не удалось использовать InputPanel в элементе управления

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

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

Всякий раз, когда я пытаюсь перетащить Control в Form, я получаю следующее сообщение об ошибке:

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’

Если удалить InputPanel линию от MyControl смогу добавьте его в Form без проблем. Как только добавляется Control, я могу снова добавить строку, и вся программа компилируется и работает нормально.

Как только форма с Control просматривается в Дизайнере, она вылетает с аналогичной ошибкой, как указано выше, и я не могу добавить ее ни к одному другому Form.

Я использую Visual Studio 2008 SP1 с SDK для Windows Mobile 6.

Так что мои вопросы: кто-нибудь испытал подобную проблему или нашел обходное решение?


EDIT: Остановился и использовал родительскую форму как собственность. Форма реализует IInputPanel, которая в основном является интерфейсом с getteran. Тем не менее ответ Ctake был очень проницательным и познакомил меня с XMTA.

ответ

3

Это потому, что на рабочем столе нет SIP (входная панель), и поэтому дизайнер не может его отобразить. Вам нужно установить атрибут DesktopCompatible в XMTA равным false.

EDIT: Я предполагаю, что я должен расширить этот ответ. Установка атрибута DesktopCompatible не позволит разработчику напрямую запрашивать свойство, но если у вас есть какой-либо код в элементе управления, который может его вызывать (так что если любой код, который будет запущен в конструкторе, может выполнять код, специфичный для CE), вы также должны добавить код для предотвращения этого. Проверка текущей платформы через Environment.OSVersion.Platform работает достаточно хорошо, хотя есть и другие, более запутанные механизмы, чтобы определить, находитесь ли вы в дизайнере.

+1

Очевидно, DesktopCompatible был установлен в false для всех элементов управления, которые я сделал. Поэтому установка DesktopCompatible в false не решила проблему. – xsl

+2

Вы вызываете CE-специфический код (например, пытаетесь показать SIP) в любом месте элемента управления, который будет выполнять дизайнер? Как показывать SIP во время активации или тому подобное? См. Мое редактирование выше. – ctacke

+2

Я тоже несколько смущен вашим комментарием - вы говорите «по-видимому», как будто вы были удивлены или не знали. Файл XMTA должен быть создан вручную вами - Studio не делает этого для вас - так что вам, конечно же, придется настраивать. – ctacke

Смежные вопросы