c # Скрыть функцию от дизайнера - PullRequest
4 голосов
/ 25 августа 2009

У меня есть функция, которая вызывает исключение в конструкторе. Можно ли избежать вызова функции, если дизайнер загружает ее? Есть ли атрибут или что-то, что лучше, чем попытаться поймать?

Еще несколько деталей: Я имею в виду дизайнера визуальных студий для победных форм. Моя форма использует знак, который вызывает LoadProject () при инициализации. Теперь я хочу, чтобы конструктор не вызывал функцию LoadProject ().

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

Предполагая, что это WinForms - вы можете проверить, находитесь ли вы в DesignMode и просто немедленно вернуть свою функцию.

Есть некоторые сложности, которые полностью объяснены в этой статье , включая решение.

1 голос
/ 25 августа 2009

Есть несколько способов определить, находитесь ли вы в режиме разработки:

  • Проверьте значение свойства DesignMode элемента управления. Это не работает в конструкторе элемента управления, так как он возвращает true только в том случае, если элемент управления был размещен, что не происходит до тех пор, пока элемент управления не был создан. Он также имеет ошибку , в результате чего пользовательский элемент управления внутри пользовательского элемента управления всегда будет возвращать false
  • Проверьте, содержит ли путь текущего приложения devenv.exe, используя Application.ExecutablePath.ToLower().IndexOf("devenv.exe"). Если это так, элемент управления создается Visual Studio. Немного ужасно, но это работает.
  • Проверьте LicenseManager.UsageMode на значение LicenseUsageMode.Designtime (см. мой ответ на Обнаружение режима разработки из конструктора элемента управления для получения более подробной информации). Обратите внимание, что это работает в конструкторе .

Завершение вызова вашей функции в любой из этих проверок должно решить вашу проблему.

1 голос
/ 25 августа 2009

Вы можете попробовать эту статью на MSDN об использовании свойства DesignMode . Это может помочь вам. Вы можете обернуть ваш код, который выдает исключение, в условный код, который избегает кода во время разработки.

Обратите внимание, что не будет работать в конструкторе , потому что дизайнер должен создать экземпляр объекта, а затем задать свойство.

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