Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать что сейчас Design Time? 
V
    Опции темы
Bogdan1024
  Дата 18.5.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



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


--------------------
user posted image
PM MAIL   Вверх
Partizan
Дата 19.5.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Bogdan1024, если у контрола есть Site и его свойство DesignMode == true, то контрол находится в design-time


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Voyager
Дата 20.5.2009, 11:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Код

        public static bool InDesign(IComponent C)
        {

            const int StartFrame = 4;
            Type InterfaceMatch = typeof(IDesignerHost);

            if (C.Site != null)
                return C.Site.DesignMode;

            StackTrace ST = new StackTrace();
            int Cnt = ST.FrameCount - 1;
            for (int I = StartFrame; I < Cnt; I++)
            {
                Type T = ST.GetFrame(I).GetMethod().DeclaringType;
                if (InterfaceMatch.IsAssignableFrom(T))
                    return true;
            }

            return false;
        }

PM   Вверх
Bogdan1024
Дата 28.9.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Цитата(Partizan @  18.5.2009,  23:35 Найти цитируемый пост)
Bogdan1024, если у контрола есть Site и его свойство DesignMode == true, то контрол находится в design-time

Походу если открыть контрол2, который содержит контрол1, то контрол1.Site == null :(


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 29.9.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Самый правильный способ узнать что сейчас design-time это сделать глобальный статический флаг IsRunTime в любом классе и поставить его в true в методе Main проги, --- проверено и работает...  smile 

Если же речь идёт о компоненте (длл), то конечно придётся возиться с Site, тут уже сложнее. Возможно придётся проверять есть ли у контрола парент сайт и т.п.


--------------------
user posted image
PM MAIL WWW   Вверх
Bogdan1024
Дата 29.9.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Цитата(mr.DUDA @ 29.9.2009,  00:18)
Самый правильный способ узнать что сейчас design-time это сделать глобальный статический флаг IsRunTime в любом классе и поставить его в true в методе Main проги, --- проверено и работает...  smile 

Как это? Не понимаю. МОжно код?

Добавлено через 6 минут и 31 секунду
Оу! Код Voyager'a реально работает! Спасибо, Voyager!


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 29.9.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Program.cs
Код
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        public static bool IsDesignMode = true;

        [STAThread]
        static void Main()
        {
            IsDesignMode = false;

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}


Любой контрол или форма:
Код
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();

            if (!Program.IsDesignMode)
                MessageBox.Show("Можно сделать что-нибудь злое, мы не в редакторе форм");
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
DsAEkb
Дата 29.9.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



99,9% работающий способ

Код

Private Shared Function IsInDesignMode() As Boolean
        Dim returnFlag As Boolean = False
#If DEBUG Then
        If System.ComponentModel.LicenseManager.UsageMode = System.ComponentModel.LicenseUsageMode.Designtime Then
            returnFlag = True
        ElseIf Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV") Then
            returnFlag = True
        End If
#End If
        Return returnFlag
    End Function

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.