выберите вкладку, открытую нажатием кнопки - PullRequest
0 голосов
/ 14 марта 2012

У меня есть форма с кнопкой.Если я нажму кнопку, откроется другая форма.Если я вернусь к родительской форме с помощью вкладки и снова нажму ту же кнопку, она ничего не сделает.

Вот мой код:

private void pictureBox1_Click(object sender, EventArgs e)
        {
             form wadd = new form(this);
             if ((IsFormAlreadyOpen(typeof(form))) == null)
             {
                 wadd.MdiParent = Form1.ActiveForm;
                 wadd.Show();
             }          
        }
 public static Form IsFormAlreadyOpen(Type FormType)
        {
            foreach (Form OpenForm in Application.OpenForms)
            {
                if (OpenForm.GetType() == FormType)
                    return OpenForm;
            }
            return null;
        }  



private void Form1_MdiChildActivate(object sender, EventArgs e)
        {
            if (this.ActiveMdiChild == null)
                tabForms.Visible = false;
            // If no any child form, hide tabControl 
            else
            {
                this.ActiveMdiChild.WindowState = FormWindowState.Maximized;
                // Child form always maximized 

                // If child form is new and no has tabPage, 
                // create new tabPage 
                if (this.ActiveMdiChild.Tag == null)
                {
                    // Add a tabPage to tabControl with child 
                    // form caption 
                    TabPage tp = new TabPage(this.ActiveMdiChild.Text);
                    tp.Tag = this.ActiveMdiChild;
                    tp.Parent = tabForms;
                    tabForms.SelectedTab = tp;                                      

                    this.ActiveMdiChild.Tag = tp;
                    this.ActiveMdiChild.FormClosed += new FormClosedEventHandler(ActiveMdiChild_FormClosed);
                }
                else
                {

                    tab();
                }

                if (!tabForms.Visible) tabForms.Visible = true;

            }
        }
        public void tab()
        {
            for (int i = 0; i < tabForms.TabCount; i++)
            {
                if (tabForms.TabPages[i].Text == this.ActiveMdiChild.Text.ToString())
                {
                    tabForms.SelectedTab = tabForms.TabPages[i];
                    break;
                }
            }
        }

        private void ActiveMdiChild_FormClosed(object sender, FormClosedEventArgs e)
        {
            //Destroy the corresponding Tabpage when closing MDI child form
            if (tabForms.HasChildren)
            {
                ((sender as Form).Tag as TabPage).Dispose();
            }            
            //If no Tabpage left
            else if (!tabForms.HasChildren)
            {
                tabForms.Visible = false;                
            }            
        }

        private void tabForms_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((tabForms.SelectedTab != null) && (tabForms.SelectedTab.Tag != null))
                (tabForms.SelectedTab.Tag as Form).Select();            
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {            
            if (!tabForms.HasChildren)
            {
                Application.Exit();
            }            
        }

Результат, который я хочу получить, - это когда я нажимаюкнопка снова, вкладка должна фокусироваться на этой форме, а не открывать новую форму, которая недопустима.

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Я думаю, вы хотите что-то вроде этого:

public Form FormOpened<T>()
    {
        foreach (Form form in Application.OpenForms)
            if (typeof(T) == form.GetType())
                return form;

        return null;
    }

Вы можете использовать его так:

form f = (form)FormOpened<form>();
if (f2 == null)
{
    f2 = new form();
    f2.MdiParent = this;
    f2.Show();
}
else
{
    f2.Focus();
}

Скажите, нужна ли вам помощь?

0 голосов
/ 14 марта 2012

Вы хотите что-то подобное, я верю:

form wadd;
private void pictureBox1_Click(object sender, EventArgs e)
    {
         if (wadd == null)
         {
             wadd = new form(this);
         }
         wadd.MdiParent = Form1.ActiveForm;
         wadd.Show();

    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...