0

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

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

4

3 回答 3

1

是的,您可以,只需在设置OwnerForm3 时设置Show它,然后在Form3'sLoad EventHandler 中检查所有者的类型以确定要启用哪个按钮。像这样的东西应该工作。

表格1

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);

    }
}

表格3

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;
    }
}
于 2013-05-16T04:07:02.197 回答
0

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

于 2013-05-16T00:23:09.913 回答
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 做某事,否则做其他事情。

于 2013-05-16T11:57:34.273 回答