2009-08-25 3 views
4

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

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

+0

Какой дизайнер - дизайнер Windows Forms? И какой метод/функция он называет дизайнером? –

+0

Подробнее, пожалуйста. –

+0

Согласен. Я дам вам +1, чтобы противодействовать, если вы улучшите свой вопрос как подробным, так и конкретным. –

ответ

1

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

  • Проверить значение DesignMode свойства элемента управления. Это не работает в конструкторе элемента управления, хотя, поскольку он возвращает true только в том случае, если элемент управления был помещен, что не происходит до тех пор, пока элемент управления не будет создан. Он также имеет bug, в соответствии с которым пользовательский контроль внутри настраиваемого элемента управления всегда будет возвращать значение false
  • Проверьте, содержит ли текущий путь приложения devenv.exe с использованием Application.ExecutablePath.ToLower().IndexOf("devenv.exe"). Если это так, элемент управления создается Visual Studio. Немного ужасно, но это работает.
  • Проверить LicenseManager.UsageMode на значение LicenseUsageMode.Designtime (см. my answer до Detecting design mode from a Control’s constructor для получения более подробной информации). Обратите внимание: это работает в конструкторе.

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

2

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

Существует несколько сложностей, которые полностью объясняются. in this article включая решение.

1

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

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

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