如何根据已加载的表单启用对表单的控制?
例如,如果从Form1打开Form3,将在Form3中启用的按钮是button1,如果从Form2打开Form3,将在Form3中启用的按钮是button2。
答案 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做某事,否则做其他事情。