C# 选择通过单击按钮打开的选项卡
我有一张有按钮的表格。如果单击该按钮,将打开另一个窗体。如果我在tab的帮助下返回到父窗体,并再次单击同一按钮,则它不会执行任何操作 这是我的密码:C# 选择通过单击按钮打开的选项卡,c#,winforms,tabs,C#,Winforms,Tabs,我有一张有按钮的表格。如果单击该按钮,将打开另一个窗体。如果我在tab的帮助下返回到父窗体,并再次单击同一按钮,则它不会执行任何操作 这是我的密码: private void pictureBox1_Click(object sender, EventArgs e) { form wadd = new form(this); if ((IsFormAlreadyOpen(typeof(form))) == null)
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();
}
}
我想要的结果是,当我再次单击按钮时,选项卡应聚焦于此表单,而不是打开不允许的新表单。我相信您想要这样的内容:
form wadd;
private void pictureBox1_Click(object sender, EventArgs e)
{
if (wadd == null)
{
wadd = new form(this);
}
wadd.MdiParent = Form1.ActiveForm;
wadd.Show();
}
你只是把逻辑倒过来了。如果没有打开的表单,则创建它,然后打开它。如果已经有一个表单,那么就使用它。我想你会想要这样的东西:
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();
}
然后您可以这样使用它:
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();
}
如果您需要帮助,请告诉我。我不知道您在哪里告诉表单要打开哪个选项卡。。。我是不是错过了什么?还有,正式的ReadyOpenReturn是什么?顺便说一句,我相信这个方法有一个更好的名称……它是用于openformif-not返回null的,我可以在代码中看到这一点。调试时。。。它返回的是什么?好的,很抱歉我错过了一些东西。实际上它返回了我的父窗体。我有代码打开选项卡,f2。focus不使用选项卡。我真的需要其他部分。iff2=空我怎么才能得到所需的标签你是什么意思。。。?我就是不明白你的要求。所以有一大堆标签,每个标签代表一个打开的窗口。当您尝试打开一个已经有选项卡的窗口时,它只是将所选选项卡设置为该选项卡?