为什么子窗体在SHOW时会出现创建窗体句柄出错
Issue.MdiParent = this;
Issue.Dock = DockStyle.Fill;
Issue.Show();

解决方案 »

  1.   

      IntPtr MainHandle;
            Message MainMessge;        frmIssue  Issue;
            frmLogout Logout;
            frmICAdd  ICAdd;
            public frmICOpr(IntPtr HandleTmp)
            {
                InitializeComponent();            MainHandle = HandleTmp;            Global.SysPara.ShowOne.IsICOpr = true;
            }        public frmICOpr(System.Windows.Forms.Message m,IntPtr HandleTmp)
            {
                InitializeComponent();            MainMessge = m;
                MainHandle = HandleTmp;            Global.SysPara.ShowOne.IsICOpr = true;
            }
      

  2.   

            private void frmICOpr_Load(object sender, EventArgs e)
            {
                TAdo   AdoPort;            ICOprs.eICOpr eOrder;            eOrder  = ICOprs.eICOpr.eNone;            Global.UnregisterHotKey(MainHandle, Global.HOTKEYF2);
                Global.UnregisterHotKey(MainHandle, Global.HOTKEYF3);
                Global.UnregisterHotKey(MainHandle, Global.HOTKEYF4);
                Global.UnregisterHotKey(MainHandle, Global.HOTKEYF5);            Global.RegisterHotKey(Handle.ToInt32(), Global.HOTKEYF2, 0, Global.VK_F2);
                Global.RegisterHotKey(Handle.ToInt32(), Global.HOTKEYF3, 0, Global.VK_F3);
                Global.RegisterHotKey(Handle.ToInt32(), Global.HOTKEYF4, 0, Global.VK_F4);
                Global.RegisterHotKey(Handle.ToInt32(), Global.HOTKEYF5, 0, Global.VK_F5);
            
                AdoPort = new TAdo(Global.SysPara.sDataSrc, "Manage10", Global.SysPara.sUser, Global.SysPara.sKey);            if (Global.SysPara.tOper.IsIssue || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabIssue.Visible = true;                //Issue = new frmIssue();
                }            if (Global.SysPara.tOper.IsLogOut || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabLogOut.Visible = true;                Logout = new frmLogout();
                }            if (Global.SysPara.tOper.IsCAddMoney || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabAddMoney.Visible = true;                //ICAdd = new frmICAdd();
                }            if (Global.SysPara.tOper.IsFunCard || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabIssueFun.Visible = true;
                }            if (Global.SysPara.tOper.IsNightCard || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabIssueNight.Visible = true;
                }            if (Global.SysPara.tOper.IsLost || Global.SysPara.tOper.IsReissue 
                    || Global.SysPara.tOper.IsBackMoney || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabLoss.Visible = true;
                }            if (Global.SysPara.tOper.IsCancelLost || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabCancelLoss.Visible = true;
                }            if (Global.SysPara.tOper.IsRoam || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabRoam.Visible = true;
                }            if (Global.SysPara.tOper.IsCardRise || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabCardRise.Visible = true;
                }            if (Global.SysPara.tOper.IsAutoRise || Global.SysPara.tOper.IsAdmin || Global.SysPara.IsBoss)
                {
                    TabAutoRise.Visible = true;
                }            if (TabIssue.Visible)
                {
                    eOrder = ICOprs.eICOpr.Issue;                TabICOPr.SelectedTab = TabIssue;                TabIssue_Click(sender, e);
                }
                else if (TabLogOut.Visible)
                {
                    eOrder = ICOprs.eICOpr.LogOut;                TabICOPr.SelectedTab = TabLogOut;
                }
                else if (TabAddMoney.Visible)
                {
                    eOrder = ICOprs.eICOpr.AddMoney;                TabICOPr.SelectedTab = TabAddMoney;
                }
                else if (TabIssueFun.Visible)
                {
                    eOrder = ICOprs.eICOpr.IssueFun;                TabICOPr.SelectedTab = TabIssueFun;
                }
                else if (TabIssueNight.Visible)
                {
                    eOrder = ICOprs.eICOpr.IssueNight;                TabICOPr.SelectedTab = TabIssueNight;
                }
                else if (TabLoss.Visible)
                {
                    eOrder = ICOprs.eICOpr.Loss;                TabICOPr.SelectedTab = TabLoss;
                }
                else if (TabCancelLoss.Visible)
                {
                    eOrder = ICOprs.eICOpr.CancelLost;                TabICOPr.SelectedTab = TabCancelLoss;
                }
                else if (TabRoam.Visible)
                {
                    eOrder = ICOprs.eICOpr.Roam;                TabICOPr.SelectedTab = TabRoam;
                }
                else if (TabCardRise.Visible)
                {
                    eOrder = ICOprs.eICOpr.CardRise;                TabICOPr.SelectedTab = TabCardRise;
                }
                else if (TabAutoRise.Visible)
                {
                    eOrder = ICOprs.eICOpr.AutoRise;                TabICOPr.SelectedTab = TabAutoRise;
                }
                else if (TabIDBand.Visible)
                {
                    eOrder = ICOprs.eICOpr.IDBand;                TabICOPr.SelectedTab = TabIDBand;
                }            if (MainMessge.HWnd.ToInt32() != 0)
                {
                    DefWndProc(ref MainMessge);
                }
            }        private void frmICOpr_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (MainHandle.ToInt32() != 0)
                {
                    Global.UnregisterHotKey(this.Handle, Global.HOTKEYF2);
                    Global.UnregisterHotKey(this.Handle, Global.HOTKEYF3);
                    Global.UnregisterHotKey(this.Handle, Global.HOTKEYF4);
                    Global.UnregisterHotKey(this.Handle, Global.HOTKEYF5);                Global.SendMessage(MainHandle.ToInt32(), Global.WM_CLOSEICPOR, 0, 0);                Global.SendMessage(MainHandle.ToInt32(), Global.WM_BANDDING, 0, 0);
                }            Global.SysPara.ShowOne.IsICOpr = false;            ICOpr.CloseCom();
            }
            private void ChkHide()
            {
                Issue.Hide();
                //Logout.Hide();
                //ICAdd.Hide();
            }        //private bool GetInstanceState(string name)
            //{
            //    int l = this.MdiChildren.Length;
            //    for (int i = 0; i < l; i++)
            //    {
            //        if (this.MdiChildren[i].Name == name)
            //        {
            //            this.MdiChildren[i].Focus();
            //            return true;
            //        }
            //    }
            //    return false;
            //}        private void TabIssue_Click(object sender, EventArgs e)
            {
                try
                {
                    //ChkHide();
                    //Issue = new frmIssue();
                    //Issue.MdiParent = this;
                    //Issue.Dock = DockStyle.Fill;
                    //Issue.Show();
                }
                catch(Exception err)
                {
                    MessageBox.Show(err.Message);
                }
            }        private void TabLogOut_Click(object sender, EventArgs e)
            {
                //ChkHide();
                Logout.MdiParent = this;
                Logout.Dock = DockStyle.Fill;            Logout.Show();            //Global.SendMessage(Global.SysPara.iLogoutWnd, Global.WM_OPENTIMER, 0, 0);
            }        private void TabAddMoney_Click(object sender, EventArgs e)
            {
                //ChkHide();
                //ICAdd.MdiParent = this;
                //ICAdd.Dock = DockStyle.Fill;
               
                //ICAdd.Show();            //Global.SendMessage(Global.SysPara.iAddMoneyWnd, Global.WM_OPENTIMER, 0, 0);
            }
      

  3.   

    //Issue = new frmIssue(); (实例化了)
            
    private void TabIssue_Click(object sender, EventArgs e) 
            { 
                try 
                { 
                    //ChkHide(); 
                    //Issue = new frmIssue(); 
                    //Issue.MdiParent = this; 
                    //Issue.Dock = DockStyle.Fill; 
                    //Issue.Show(); 
                } 
                catch(Exception err) 
                { 
                    MessageBox.Show(err.Message); 
                } 
            } 
    不知道为什么有创建窗体句柄出错
      

  4.   

    我是使用的第三方控件,我发现只要设成MDI窗体就有问题,
    我现在想到的解决办法就是控制窗体的显示位置,看上去也象是MDI模式的,谢谢各位了。