none
При закрытие MDI формы, удалить TabPage из главной формы RRS feed

  • Вопрос

  • Всем привет. При нажатии кнопки добавляется новое TabPage в Tabcontrol, и на него MDI форма. Но не могу удалить вкладку при закрытии формы MDI. Все варианты перепробовал.

    Вот так из главной формы добавляю новую форму(mdi) в табконтрол 

                TabPage tb = new TabPage();
                tb.Name = mdi.RDP_client1.Server.ToString();
                tb.Text = mdi.RDP_client1.Server.ToString();
                
                tabControl2.TabPages.Add(tb);
     
     
     
                mdi.Name = tb.Name;
                mdi.Text = tb.Text;
                
                mdi.TopLevel = false;
                tb.Controls.Add(mdi);
                mdi.Show();

    А так, если закрыть mdi форму, то должно удалится tabpage

    private void MDIParent1_FormClosing(object sender, FormClosingEventArgs e)
            {
                RDP_client1.Disconnect();
     
                while (RDP_client1.Connected != 0)
                {
                    System.Threading.Thread.Sleep(1000);
                    Application.DoEvents();
                }
     
                Form1 _form1 = new Form1();
                MessageBox.Show("Tab Pages: " + _form1.tabControl2.TabCount.ToString());
                //_form1.tabControl2.TabPages[this.Name].Dispose();
               
               _form1.tabControl2.TabPages.RemoveByKey(this.Name);
     
            }

    6 марта 2014 г. 11:29

Ответы

  • Как я понял, Form1 - это главная форма приложения. Посмотрите вот на этот фрагмент Вашего кода:

    Form1 _form1 = new Form1();
    
    _form1.tabControl2.TabPages.RemoveByKey(this.Name);

    Как Вы думаете, с каким экземпляром главной формы Вы пытаетесь взаимодействовать? Думаю, с тем, который понятия не имеет о добавленных ранее закладках в TabControl. Вы, вообще, понимаете действие операции new?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    6 марта 2014 г. 19:27
  • tabpage отдельный объект, не относится к tabControl, но используется в нем. лучше было бы если этот tabPage не удалять, а прятать, тогда вы сможете его заново показывать без изменении на поверхности. через Visible/Visibility
    6 марта 2014 г. 14:16
  • У любого элемента управления есть свойство Parent. Попробуйте "пройти" по стеку родителей Вашего элемента, пока не дойдёте до главной формы. Так получите нужный объект и используйте его как Вам нужно.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    7 марта 2014 г. 14:05

Все ответы

  • tabpage отдельный объект, не относится к tabControl, но используется в нем. лучше было бы если этот tabPage не удалять, а прятать, тогда вы сможете его заново показывать без изменении на поверхности. через Visible/Visibility
    6 марта 2014 г. 14:16
  • как прятать, если я не могу достучатся до этого элемента
    6 марта 2014 г. 17:18
  • Как я понял, Form1 - это главная форма приложения. Посмотрите вот на этот фрагмент Вашего кода:

    Form1 _form1 = new Form1();
    
    _form1.tabControl2.TabPages.RemoveByKey(this.Name);

    Как Вы думаете, с каким экземпляром главной формы Вы пытаетесь взаимодействовать? Думаю, с тем, который понятия не имеет о добавленных ранее закладках в TabControl. Вы, вообще, понимаете действие операции new?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    6 марта 2014 г. 19:27
  • как прятать, если я не могу достучатся до этого элемента

    используйте слово this
    7 марта 2014 г. 3:34
  • Как я понял, Form1 - это главная форма приложения. Посмотрите вот на этот фрагмент Вашего кода:

    Form1 _form1 = new Form1();
    
    _form1.tabControl2.TabPages.RemoveByKey(this.Name);

    Как Вы думаете, с каким экземпляром главной формы Вы пытаетесь взаимодействовать? Думаю, с тем, который понятия не имеет о добавленных ранее закладках в TabControl. Вы, вообще, понимаете действие операции new?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    я то понял свою ошибку, так как в таком случае создается новый экземпляр формы. ВОт поэтому я не достучатся до tabpage
    7 марта 2014 г. 6:17
  • У любого элемента управления есть свойство Parent. Попробуйте "пройти" по стеку родителей Вашего элемента, пока не дойдёте до главной формы. Так получите нужный объект и используйте его как Вам нужно.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    7 марта 2014 г. 14:05