Compact Framework: не удалось использовать InputPanel в элементе управления - PullRequest
3 голосов
/ 08 апреля 2009

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

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

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

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

System.IO.FileNotFoundException: может не загружать файл или сборку «Microsoft.WindowsCE.Forms, Версия = 2.0.0.0, Культура = нейтральная,
PublicKeyToken = 969db8053d3322ac ’или одна из его зависимостей. Система не могу найти указанный файл. файл имя: ‘Microsoft.WindowsCE.Forms, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = 969db8053d3322ac»

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

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

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


Итак, мои вопросы: кто-нибудь сталкивался с подобной проблемой или нашел обходной путь?


РЕДАКТИРОВАТЬ: Gave и использовать родительскую форму в качестве свойства. Форма реализует IInputPanel, который в основном является интерфейсом с геттером InputPanel. Тем не менее ответ ctake был действительно проницательным и познакомил меня с XMTA.

1 Ответ

3 голосов
/ 08 апреля 2009

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

РЕДАКТИРОВАТЬ: я полагаю, я должен расширить этот ответ. Установка атрибута DesktopCompatible не позволит конструктору напрямую запрашивать свойство, но если у вас есть какой-либо код в элементе управления, который может вызвать его (поэтому, если любой код, который будет выполняться в конструкторе, может выполнять код, специфичный для CE), вы также должны добавить код, чтобы предотвратить это. Проверка текущей Платформы с помощью Environment.OSVersion.Platform работает довольно хорошо, хотя есть и другие, более замысловатые, механизмы, позволяющие определить, являетесь ли вы разработчиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...