日期:2014-05-19  浏览次数:20877 次

用户控件开启窗口问题
winform两个
AForm、BForm

用户控件一个(上面两个窗口共用这个用户控件),其中有两个按钮
1、btnToAForm(button),其事件为:
                //开启AForm
                private   void   btnToAForm_Click(object   sender,   EventArgs   e)
                {
                        this.ParentForm.Hide();
                        AForm   aForm   =   new   AForm();
                        aForm.Show();
                }

2、btnToBForm(button),其事件为:
                //开启BForm
                private   void   btnToAForm_Click(object   sender,   EventArgs   e)
                {
                        this.ParentForm.Hide();
                        BForm   bForm   =   new   BForm();
                        bForm.Show();
                }

这样做到了窗口的显示及隐藏,但每次因为是new出来的,所以在切换时,A、B两个Form各种状态都会是初始状态,无法保持原来的运行状态,比如,从AForm点btnToBForm按钮进到BForm,BForm有个进度条(ProgressBar)在运行,同时可以看到其进度值,我这时再点btnToAForm按钮切换到AForm后,再点btnToBForm按钮进到BForm,这时BForm的进度条(ProgressBar)状态已经被初始了,没有任何动作了。想要的是不管怎么点,其AForm及BForm状态都会保持不变,简单说就是不是new出来的,而是藏好后,又显示出来,我试过   xxx.Visible=true这些都不太对头,可能是方法错了,请各们达人指教....

------解决方案--------------------
可以这样做,在 MainForm 中定义两个变量分别记录 AFrom 和 BForm:

class MainForm : Form
{
private Form m_aform = null;
private Form m_bform = null;


另外就是修改创建逻辑:

1、btnToAForm(button),其事件为:

//开启AForm
private void btnToAForm_Click(object sender, EventArgs e)
{
this.ParentForm.Hide();

if (this.m_aform == null)
this.m_aform = new AForm();

this.m_aform.Show();
}

2、btnToBForm(button),其事件为:

//开启BForm
private void btnToAForm_Click(object sender, EventArgs e)
{
this.ParentForm.Hide();

if (this.m_bform == null)
this.m_bform = new BForm();

this.m_bform.Show();
}


------解决方案--------------------
楼上的是个好办法
也同样可以在A窗体中声明一个B窗体变量
在B窗体中声明A窗体变量

class A : Form
{
public FormB B;

private void btnToAForm_Click(object sender, EventArgs e)
{
this.ParentForm.Hide();
if (this.B == null)
{
this.B = new FormB();
}
else
{
this.B.Show();
}

this.m_aform.Show();
}
}
------解决方案--------------------
要实现上述功能,标准的做法是使用单例模式。楼主,试试吧!:)
public partial class MyForm : Form
{
private static MyForm _f = new MyForm();
public static MyForm Create()
{
return _f;
}
private MyForm()
{
InitializeComponent();
}
//一定要重写Dispose方法
protected overrid