日期:2014-05-18  浏览次数:20927 次

winform窗体显示问题
如我有Form1、Form2、Form3三个窗体,在Form1中打开Form2同时Form1隐藏,在Form2中打开Form3同时Form2隐藏,现在我要在Form3中打开Form1,但要求打开的Form1是原来的隐藏的Form1,也就是在打开Form2时隐藏的Form1。但我不知道怎么做,求解答!

------解决方案--------------------
所谓的 单例模式就是 创建一个 静态的 变量,窗体是 私有的,因为窗体是私有的,所以其他类是 无法访问的,所以。。。你要 在静态方法中返回 你刚刚 的静态变量,这样就保证了 所有的实例对象都是唯一的了。
------解决方案--------------------
public static Form1 fm1 = null;

private void button1_Click(object sender, EventArgs e)
{
fm1 = this;
fm1.Hide();
fm2.Show();
}
------解决方案--------------------
like the following:

可以写个公共类(静态):
CommonClass:
 static Form f = null;
public static void GetHideForm(Form f1)
{
f = f1;
}

public static Form ReturnHideForm()
{
return f;
}

form1:

(new Form2()).Show();
this.Hide();
CommonClass.GetHideForm(this);

form2:

this.Hide();
Class1.ReturnHideForm().Show();
==================================
试了,成功!!
点击form1的button,form2出现,form1隐藏;
点击form2的button,form1出现,form2隐藏(仍是原来的form1);
------解决方案--------------------
我的办法笨了点,而且也只能按要求来,就是把FORM1当参数传递到FOMR3中,这样就能显示原来的FROM1了
form1:
 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); 
}

private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
Form2 f2 = new Form2(this);
f2.Show();
}
}

form2:

public partial class Form2 : Form
{
Form f;
public Form2()
{
InitializeComponent();
}
public Form2(Form f)
{
this.f = f;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
Form3 frm3 = new Form3(f);
frm3.Show();
}
}

form3:
public partial class Form3 : Form
{
Form f;
public Form3()
{
InitializeComponent();
}
public Form3(Form f)
{
this.f = f;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
f.Visible=true;
}
}
个人感觉单例的应该会好很多,但是水平不行,完不成
------解决方案--------------------
首先确定Form1打开Form2,Form2打开Form3 用的是Show
Form3里面

foreach (Form f in Application.OpenForms)
{
if (f is Form1)
f.Visible = true;
}