Зная, когда в режиме дизайна - PullRequest
5 голосов
/ 06 сентября 2011

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

Я пытался использовать System.ComponentModel.LicenseManager.UsageMode, но, похоже,значение времени выполнения, даже когда я редактировал форму.

ОБНОВЛЕНИЕ: Чтобы уточнить, я хочу знать, нахожусь ли я в режиме разработки не из компонента, а изнутриотдельный класс, который вызывается другими элементами из формы или элемента управления.У меня есть класс Utility, который вызывается косвенно из элемента управления, и именно там мне нужно знать, нахожусь ли я в режиме разработки или нет.

Ответы [ 4 ]

3 голосов
/ 06 сентября 2011

Я не думаю, что Component.DesignMode поможет в этом случае. Что если компонент или элемент управления не загружен в конструктор форм? В этом случае вы можете попробовать создать перечисление, которое устанавливает только одно значение при обычном запуске, которое в противном случае остается другим значением по умолчанию. Теперь вы можете проверить значение экземпляра enum и решить, будет ли это время разработки или время выполнения.

3 голосов
/ 06 сентября 2011

Вы можете использовать Component.DesignMode , чтобы проверить это.Однако имейте в виду, что это всегда будет сообщать false внутри конструктора компонента, поэтому его необходимо проверить позже.Подробнее см. Отладка элементов управления времени разработки .


Редактировать в ответ на комментарии и редактировать:

К сожалению, LicenseMananger, а также большинстводругие службы, которые предоставляют информацию о том, находитесь ли вы в режиме разработки (включая Component.DesignMode и DesignerProperties.IsInDesignMode ), специально предназначенные для обработки элементов пользовательского интерфейса.Это имеет смысл, поскольку они предназначены для того, чтобы сообщать вам, когда ваш элемент «проектируется» на поверхности конструктора, для чего требуется, чтобы компонент был зарегистрирован в конструкторе.

Нет единого свойства, которое будет чистосказать вам это из произвольного класса.

Я мог видеть два варианта, оба из которых не идеальны:

  1. Передать необходимую информацию в ваш класс (то есть: a Component или DependencyObject), поэтому описанные выше методы можно использовать для правильной проверки доступа во время разработки.Это, вероятно, более приемлемый подход, и, скорее всего, он будет работать должным образом в других ситуациях.
  2. Прибегайте к «хаку» проверки текущего имени процесса и поиска «devenv» - этодовольно ужасно, так как предполагает только Visual Studio, полагается на имя исполняемого файла и т. д. В общем, я упомяну это, потому что вы найдете его с достаточным количеством запросов, но не рекомендовали бы его, так как это очень легкообходит и имеет много ограничений и недостатков.
1 голос
/ 06 сентября 2011

Разве невозможно использовать свойство Component.DesignMode?

0 голосов
/ 06 сентября 2011

Вот некоторая информация о применении атрибутов для получения специфического поведения во время разработки: http://msdn.microsoft.com/en-us/library/37899azc.aspx

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