问题描述
privateAxDSOFramer.AxFramerControlaxf_Excel=newAxDSOFramer.AxFramerControl();不要把控件直接拖到窗体上,而是使用代码New出来,然后:ThreadthOpen;privatevoidExcelCtrlEx_Load(objectsender,EventArgse){thOpen=newThread(newThreadStart(FOpen));((System.ComponentModel.ISupportInitialize)(this.axf_Excel)).BeginInit();axf_Excel.Dock=System.Windows.Forms.DockStyle.Fill;axf_Excel.Enabled=true;axf_Excel.Location=newSystem.Drawing.Point(0,0);this.spc_Excel.Name="spc_Excel";spc_Excel.Panel1.Controls.Add(axf_Excel);axf_Excel.Titlebar=false;axf_Excel.Menubar=false;axf_Excel.Toolbars=true;((System.ComponentModel.ISupportInitialize)(this.axf_Excel)).EndInit();//启动现成加载EXCELthOpen.Start();}privatevoidFOpen(){lock(axf_Excel){try{axf_Excel.Open(m_strPagePathName,false,"Excel.Sheet","","");xBook=(Workbook)axf_Excel.ActiveDocument;//xSheet=(xBook.Worksheets[1]);xSheet=(Worksheet)xBook.ActiveSheet;}catch(System.Exceptionex){MessageBox.Show(ex.Message.ToString());}}}要点:1、直接使用代码加载,加载的只能是UserControl,或是只要显示的FORM,如果要是在FORM中嵌套FROM,则比被嵌套的FORM就必须设置显示层次,且必须要设置能为非顶级,如果设置为非顶级,着也会出现外部EXCEL无法编辑的情况2、加载的时候,使用异步线程加载,如果不使用,在打开多个时候,会有问题3、在做保存等操作的时候,使用委托异步操作。例如:MethodInvokerIn=newMethodInvoker(SaveOnePage);this.BeginInvoke(In);privatevoidSaveOnePage(){try{axf_Excel.Save();}catch(System.Exceptionex){MessageBox.Show(ex.Message.ToString());}}
解决方案
解决方案二:
谢谢楼主,很有帮助!
解决方案三:
this.spc_Excel.Name="spc_Excel";spc_Excel.Panel1.Controls.Add(axf_Excel);请问this.spc_Excel是什么呀?我把上面两条改成this.panel1.Controls.Add(axf_Excel);然后打开程序后,在外部再打开一个excel两个excel来回操作仍出现锁死。高手请问有源码?QQ:783630253万分感谢