none
Дочернии формы MDI RRS feed

  • Вопрос

  • Добрый день.

    Имеется форма MDI. При загрузке дочернии формы не подгружаются. Загружаю первую дочернюю форму. Вот отрывок кода.

    int i = this.MdiChildren.Length; //Количество загруженных доч. форм
    
          if (i == 0)
          {
            CatalogiOpen(); //Загрузка доч. формы
            return;
          }
    
          if (i > 0)
          {
            for (int j = 0; j < i; j++)
            {
              if (this.MdiChildren[j].Text.Equals("Выбор каталога"))
              {
                this.MdiChildren[j].WindowState = FormWindowState.Maximized;
                this.MdiChildren[j].Activate();
                break;
              }
              
            }
          }
          else
          {
            CatalogiOpen();
          }
    

    Загружаю другую дочернюю форму, не загружается пока не закрою первую ? И наоборот, если загружу вторую, то первая не загружается пока не закрою вторую.

     

    13 июля 2011 г. 8:45

Ответы

  •    if (i > 0)
       {
        for (int j = 0; j < i; j++)
        {
         if (this.MdiChildren[j].Text.Equals("Выбор каталога"))
         {
          this.MdiChildren[j].WindowState = FormWindowState.Maximized;
          this.MdiChildren[j].Activate();
          break;
         }     
        }
       }
       else
       {
        // Этот код никогда не выполняется     
        CatalogiOpen();
       }
    


    Я бы ввел дополнительную переменную, чтобы это испрваить

       bool NeedOpen = true;
       if (i > 0)
       {
        for (int j = 0; j < i; j++)
        {
         if (this.MdiChildren[j].Text.Equals("Выбор каталога"))
         {
          this.MdiChildren[j].WindowState = FormWindowState.Maximized;
          this.MdiChildren[j].Activate();
          NeedOpen = false;
          break;
         }     
        }
       }
       if (NeedOpen == true)
       {
        // Если выбор каталога еще не открыт
        // То должно отработать открытие
        CatalogiOpen();
       }


    • Предложено в качестве ответа Abolmasov Dmitry 13 июля 2011 г. 9:22
    • Помечено в качестве ответа hochuznat 13 июля 2011 г. 11:30
    13 июля 2011 г. 9:21
    Модератор

Все ответы

  • Здравствуйте.

    В чем собственно вопрос?

    У вас вывоз функции CatalogiOpen();, которая загружает формы зависит от счетчика i. И загрузка происходит только тогда, когда i=0, т.е. дочерних форм нет. Пока существует первая форма i>0 и загрузка другой осуществлятся не будет.


    Для связи [mail]
    13 июля 2011 г. 9:17
  •    if (i > 0)
       {
        for (int j = 0; j < i; j++)
        {
         if (this.MdiChildren[j].Text.Equals("Выбор каталога"))
         {
          this.MdiChildren[j].WindowState = FormWindowState.Maximized;
          this.MdiChildren[j].Activate();
          break;
         }     
        }
       }
       else
       {
        // Этот код никогда не выполняется     
        CatalogiOpen();
       }
    


    Я бы ввел дополнительную переменную, чтобы это испрваить

       bool NeedOpen = true;
       if (i > 0)
       {
        for (int j = 0; j < i; j++)
        {
         if (this.MdiChildren[j].Text.Equals("Выбор каталога"))
         {
          this.MdiChildren[j].WindowState = FormWindowState.Maximized;
          this.MdiChildren[j].Activate();
          NeedOpen = false;
          break;
         }     
        }
       }
       if (NeedOpen == true)
       {
        // Если выбор каталога еще не открыт
        // То должно отработать открытие
        CatalogiOpen();
       }


    • Предложено в качестве ответа Abolmasov Dmitry 13 июля 2011 г. 9:22
    • Помечено в качестве ответа hochuznat 13 июля 2011 г. 11:30
    13 июля 2011 г. 9:21
    Модератор
  • bool NeedOpen = true;

    Это помогло. Прошу извинить меня, вопрос собственно простой и требовалась логика. Не дошло до меня насчет дополнительного флага.

    Спасибо. Удачи всем.

     

    13 июля 2011 г. 11:30