Исходя из этого вопроса , можно ли определить, находится ли объект в режиме разработки или во время выполнения, из конструктора объекта?
Я понимаю, что это может быть невозможно, и что мне придется изменить то, что я хочу, но пока меня интересует этот конкретный вопрос.
ISite.DesignMode
.Вы ищете что-то вроде этого:
Вы также можете сделать это, проверив имя процесса:
источник
devenv
.Компонент ... насколько я знаю, не имеет свойства DesignMode. Это свойство предоставляется Control. Но проблема в том, что когда CustomControl находится в форме в конструкторе, этот CustomControl работает в режиме выполнения.
Я испытал, что свойство DesignMode правильно работает только в форме.
источник
Органы управления (Формы, элементы управления UserControl и т.д.) унаследуют
Component class
который имеетbool property DesignMode
так:источник
OnHandleCreated
.ВАЖНЫЙ
Есть разница в использовании Windows Forms или WPF !!
У них разные дизайнеры и разные проверки . Кроме того, сложно смешивать элементы управления Forms и WPF. (например, элементы управления WPF внутри окна форм)
Если у вас только Windows Forms , используйте это:
Если у вас только WPF , используйте эту проверку:
Если вы используете смешанные формы и WPF, используйте следующую проверку:
Чтобы увидеть текущий режим, вы можете показать MessageBox для отладки:
Замечание:
Вам нужно добавить пространства имен System.ComponentModel и System.Diagnostics .
источник
Вы должны использовать свойство Component.DesignMode. Насколько я знаю, это не следует использовать из конструктора.
источник
if (!DesignMode)
методы OnPaint, чтобы убедиться, что они не спамят во время разработки.В этом блоге описан еще один интересный метод: http://www.undermyhat.org/blog/2009/07/in-depth-a-definitive-guide-to-net-user-controls-usage-mode-designmode-or -usermode /
По сути, он проверяет, является ли выполняющаяся сборка статической ссылкой из входной сборки. Это позволяет избежать необходимости отслеживать имена сборок (devenv.exe, monodevelop.exe ..).
Однако он не работает во всех других сценариях, когда сборка загружается динамически (например, VSTO).
источник
В сотрудничестве с дизайнером ... Его можно использовать в элементах управления, компонентах и везде.
MessageBox.Show(
линии следует удалить. Это только убеждает меня, что он работает правильно.источник
Вы можете использовать это
источник
Это метод, который я использовал в своем проекте:
Внимание !!!: возвращенный код bool указывает НЕ в режиме разработки!
источник
источник
Решение LicenseManager не работает внутри OnPaint, как и this.DesignMode. Я прибег к тому же решению, что и @Jarek.
Вот кешированная версия:
Имейте в виду, что это не удастся, если вы используете какую-либо стороннюю IDE или если Microsoft (или ваш конечный пользователь) решит изменить имя исполняемого файла VS на что-то другое, кроме devenv. Частота отказов будет очень низкой, просто убедитесь, что вы имеете дело с любыми возникающими ошибками, которые могут возникнуть в коде, который не работает в результате этого, и все будет в порядке.
источник
Если вы хотите запустить несколько строк, когда он запущен, но не в конструкторе Visual Studio, вам следует реализовать свойство DesignMode следующим образом:
источник
Таймеры, которые включены по умолчанию, могут вызвать сбой при использовании настраиваемых / пользовательских элементов управления. Отключите их по умолчанию и включите только после проверки режима разработки
источник