根据加载的表单启用表单控制?

时间:2013-05-16 00:14:08

标签: c# .net winforms forms parent-child

如何根据已加载的表单启用对表单的控制?

例如,如果从Form1打开Form3,将在Form3中启用的按钮是button1,如果从Form2打开Form3,将在Form3中启用的按钮是button2。

3 个答案:

答案 0 :(得分:1)

是的,您可以,只需在Owner时设置Form3的Show,然后在Form3's中加载EventHandler,检查所有者的类型以确定要启用的按钮。这样的事情应该有效。

<强> Form1中

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form3 frm3 = new Form3();
        frm3.Show(this);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(); //Show Form2 for Testing
        frm2.Show();
    }
}

<强>窗体2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form3 frm3 = new Form3();
        frm3.Show(this);

    }
}

<强> Form3

public partial class Form3 : Form
{
    public Form3()
    {
        InitializeComponent();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
        if (Owner == null) return; //Check to make sure there is an Owner
        if (Owner.GetType() == typeof(Form1))
            button1.Enabled = true;
        else if (Owner.GetType() == typeof(Form2))
            button2.Enabled = true;
    }
}

答案 1 :(得分:0)

我认为if (typeof(ParentForm) == typeof(Form1))会做你想要的。请记住,此检查完全基于类型,因此如果您有多个Form1实例,则可能会遇到一些问题。

答案 2 :(得分:0)

他的意思是,如果你有一个Form类型的表单,如果你只看类型就不知道哪个表单是父表单。

Form1打开Form3,两个表单都是System.Windows.Forms类型 Form2打开Form3,两个窗体都是System.Windows.Forms

类型

如果所有三种形式的类型都不同,那么您可以检查类型是否不同。 否则你必须检查名字。

form1.Name = "form1";
form2.Name = "form2";
form3.Name = "form3";

您将使用

在form1中打开子表单
form3.ShowDialog(this);

在form3中,您可以检查父表单并检查其名称。如果它是form2做某事,否则做其他事情。