想通过线程打开新的窗体,关闭已经打开的窗体!现有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 指令或程序集引用,各位大大帮忙呀!!

解决方案 »

  1.   

    TO:但是这个 IncreaseHandle  是什么,网上和MSDN上找不到解释,也没有相关的命名空间名称缺少 using 指令或程序集引用,各位大大帮忙呀!!自定义的委托...
      

  2.   

    try..private delegate bool IncreaseHandle( int nValue );详见:http://blog.csdn.net/knight94/archive/2006/05/27/757351.aspx
      

  3.   

    谢谢个位大大的提示!!那么是不是这个自定义委托,使用了一个参数!!那么有没有相关FORM窗体的线程例子呢?
      

  4.   

    怎么才能实现 点击 A 按钮 A 子窗体出现,点击 B 按钮 B 子窗体出现 并隐藏 A 子窗体,如果再次点击已经点击过的B 按钮 那么 隐藏 A 子窗体 ,现实 B 子窗体,并且A B 等子窗体 通过线程建立 现实 隐藏!
      

  5.   

    在线程中使用Control.Invoke或Control.BeginInvoke来调用窗口的操作。关于窗口的交互,参考,
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
      

  6.   

    zhzuo(秋枫) 你提供的资料我看过!!但是我想找关于窗体使用线程打开关闭的资料或者例子!
      

  7.   

    本人从事C#开发已有三年时间,希望结交行内好友,大家共同进取,
    请加我的QQ群号码:35651007 注明CSDN即可
      

  8.   

    to 怎么才能实现 点击 A 按钮 A 子窗体出现,点击 B 按钮 B 子窗体出现 并隐藏 A 子窗体,如果再次点击已经点击过的B 按钮 那么 隐藏 A 子窗体 ,现实 B 子窗体,并且A B 等子窗体 通过线程建立 现实 隐藏!这个好实现,你可以写一个函数,功能就是把所有的窗体hide,在A、B....按键里写上
    allFormHide();
    CurrentForm.Show();
    这两句就行了。
    关于你为什么要在thread中建立Form,我就不太明白,感觉没有多大实际的用途。
      

  9.   

    因为窗口比较多,如果都加载在启动,那么消耗内存和CPU比较多!!如果用那个打开那个,用别的把以前用的那个窗口关闭,在内存和CPU方面消耗就比较小了!!
      

  10.   

    如果是.Net 完全版,用自定义的委托。好好看看invoke。
    如果是精简版,还是用系统的吧。void EventHandler(object sender, EventArgs e)
      

  11.   

    以前遇到过的问题        //子窗体唯一
            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("窗体加载失败!");
                }        }如果有什么问题,还请同仁指教
      

  12.   

    错误 1 “WeightSystem.frmHouseManage”是一个“类型”,这在给定的上下文中无效 C:\Documents and Settings\Pfworld\My Documents\Visual Studio 2005\Projects\WeightSystem\WeightSystem\frmMeun.cs 130 40 WeightSystem
      

  13.   

    在主窗体中用一个Form[]数组来保存所有子窗体不是简单很多吗?
    另外如果个别窗体不需要在其它窗体显示的时候关闭,就用单件模式吧。