想通过线程打开新的窗体,关闭已经打开的窗体!现有A B C D E 5个子窗体和S一个主窗体,想实现在S中点击按钮后通过线程打开子窗体,子窗体显示在S主窗体的panel1中。在看了Knight94(愚翁)大侠的帖子后改写如下代码: private frmWeight fwh = null;
private IncreaseHandle myIncrease = null; /// <summary>
/// 打开窗体
/// </summary>
private void ShowfrmWeight()
{
fwh = new frmWeight();
myIncrease = new IncreaseHandle(myProcessBar.Increase);
fwh.TopLevel = false;
fwh.Parent = this.panel1;
fwh.Show();
} /// <summary>
/// 线程函数
/// </summary>
private void ThreadFun()
{
MethodInvoker mi = new MethodInvoker(ShowfrmWeight);
this.BeginInvoke(mi);
Thread.Sleep(1000);//Sleep a while to show window
}但是这个 IncreaseHandle 是什么,网上和MSDN上找不到解释,也没有相关的命名空间名称缺少 using 指令或程序集引用,各位大大帮忙呀!!
private IncreaseHandle myIncrease = null; /// <summary>
/// 打开窗体
/// </summary>
private void ShowfrmWeight()
{
fwh = new frmWeight();
myIncrease = new IncreaseHandle(myProcessBar.Increase);
fwh.TopLevel = false;
fwh.Parent = this.panel1;
fwh.Show();
} /// <summary>
/// 线程函数
/// </summary>
private void ThreadFun()
{
MethodInvoker mi = new MethodInvoker(ShowfrmWeight);
this.BeginInvoke(mi);
Thread.Sleep(1000);//Sleep a while to show window
}但是这个 IncreaseHandle 是什么,网上和MSDN上找不到解释,也没有相关的命名空间名称缺少 using 指令或程序集引用,各位大大帮忙呀!!
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
请加我的QQ群号码:35651007 注明CSDN即可
allFormHide();
CurrentForm.Show();
这两句就行了。
关于你为什么要在thread中建立Form,我就不太明白,感觉没有多大实际的用途。
如果是精简版,还是用系统的吧。void EventHandler(object sender, EventArgs e)
public static bool m_HaveChildForm = false;
public static Form m_UniqueChildForm = null;
//Panel中窗体object对象
private object typForm = null;
private Form childForm = null;#region 加载窗体
/// <summary>
/// 根据namespace动态创建窗体
/// </summary>
/// <param name="childFormHandleName">类的命名空间+类的名称</param>
private void LoadChildForm(string childFormHandleName)
{
typForm = null;
//动态反射一个窗体对象
typForm = Assembly.Load("SISP.ClientSimple").CreateInstance(childFormHandleName);
if (typForm != null)
{
if (!m_HaveChildForm)
{
try
{
//动态显示窗体
ShowChildForm(typForm);
}
catch
{
//窗体加载失败!
MessageBox.Show("窗体加载失败!");
} }
else
{
m_UniqueChildForm.Close();
m_UniqueChildForm.Dispose();
m_UniqueChildForm = null; m_HaveChildForm = false; try
{
//动态显示窗体
ShowChildForm(typForm); }
catch
{
//窗体加载失败!
MessageBox.Show("窗体加载失败!");
}
}
}
}/// <summary>
/// 根据object对象动态显示窗体
/// </summary>
/// <param name="handleForm">objectform's handle</param>
private void ShowChildForm(object handleForm)
{
try
{
childForm = (Form)handleForm; //设置窗体级别
childForm.TopLevel = false; //在Panel中加载窗体对象
this.spCon_Main.Panel2.Controls.Add(childForm); //让窗体布满整个Panel控件中
childForm.Dock = DockStyle.Fill; //根据整体主窗体样式变化子窗体的样式
//FormStyleCustom(childForm); //显示子窗体
childForm.Show(); m_HaveChildForm = true;
m_UniqueChildForm = childForm;
}
catch
{
//窗体加载失败!
MessageBox.Show("窗体加载失败!");
} }如果有什么问题,还请同仁指教
另外如果个别窗体不需要在其它窗体显示的时候关闭,就用单件模式吧。