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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UserControl в период DesignTime 
:(
    Опции темы
Codegrammer
Дата 17.6.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема такая. Control состоит из одного ListBox, который выводит запущенные процессы. Как только я кладу его на форму, он уже во время редактирования начинает показывать инфу. Причем она обновляется!!! Это сильно портит жизнь, т.к. некоторые процессы во время редактирования не дают доступ и начинается фейл. Тупо вылетает студия. Не думаю, что код интересен вам (если надо - я выложу). Можно ли как-то отключить работу UserControl во время редактирования?
PM MAIL   Вверх
Partizan
Дата 17.6.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



Код

if (!DesignMode)
{
.....
}



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
explorer
Дата 5.7.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Причем, если проект чисто под Windows (а это, судя по-всему так), то можно реализовать свойство DesignMode для компонента несколькими способами. Сразу оговорюсь, что танцы с бубном, приведенные ниже, имеют смысл только тогда, когда нужно знать режим работы находясь в конструкторе компонента. В иных случаях стандартного ISite.DesignMode вполне достаточно.

1.
Код

public new bool DesignMode 
{
  get
  {
       return { System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv" };
  }
}

или еще один вариант, но этот уже на все случаи жизни:
Код

public new bool DesignMode 
{
   if (Site != null)
       return Site.DesignMode;

   StackTrace stackTrace = new StackTrace();
   int frameCount = stackTrace.FrameCount - 1;
   for (int i = 0; i < frameCount; ++i)
   {
        Type type = stackTrace.GetFrame(i).GetMethod().DeclaringType;
        if (typeof(IDesignerHost).IsAssignableFrom(type))
            return true;
   }
   return false;
}

--------------------
 
PM MAIL WWW ICQ   Вверх
KelTron
Дата 6.7.2010, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помню где то на форме было такое решение:
Код

static class Program
{
    public static bool IsRunTime { get; private set; }

    static Program()
    {
        Program.IsRunTime = false;
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Program.IsRunTime = true;

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

Далее в контроле:
Код

if (!Program.IsRunTime)
{
   ...
}



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Лен
Дата 7.7.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В своё время поимел очень много проблем с определением DesignMode. Поделюсь наблюдениями:
1. Не работает, если проверка осуществляется в контроле, который позже в дизайнере студии ложится на какую-либо форму или другой контрол.
Код

if (!DesignMode)



2. Небезопасно, ибо может швырять исключения.
Код

return { System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv" };



3. Посему уже почти два года используем следующий вариант: ищем первый контейнер, для которого включен DesignMode
Код

public new bool DesignMode
{
  get
    {
      Control c = this;
      while (c != null)
      {
        Form form = c.FindForm();
        if ((form != null) && (form.Site != null) && form.Site.DesignMode)
          return true;

        if ((c.Site != null) && c.Site.DesignMode)
          return true;

        c = c.Parent;
      }

      return false;
    }
}


Это сообщение отредактировал(а) Лен - 7.7.2010, 10:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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