提出该问题的原因是,用了一个第三方的组件,c1dockingtab,能实现Visual studio开发界面一样的窗体停靠功能,但它不是继承自form,所以,只能把做好的usercontrol界面,放到它的docktabpage里,做为docktabpage的control. 问题是,这时外层的docktabpage如何访问里面的usercontrol中的控件或变量的值。如下:我用form 代替了docktabpage.把usercontrol放到form中了。
环境:VB2015.
设计:
一个MDI主窗体frm_mdi,里面左边是一个treeview,treeview中有个NODE, name是frm_insheet, text是采购入库单。
在项目中创建了一个窗体frm_insheet,同上面的NODE同名。空白,无任何控件在里面。
在项目中创建了一个usercontrol,usercontrol的name也是frm_insheet. 也和上面同名,上面有一个textbox1,还有个变量int_statu=0, 在textbox1的textchanged事件中,int_statu=1. 还有个btn_close关闭按钮来关闭。
主要实现的是,在treeview的TreeView1_NodeMouseDoubleClick事件中,用以下代码:
‘先依据点击的treeview 的node的名字创建frm_insheet窗体实例,然后,创建usercontrol 名为frm_insheet实例,并把它放到窗体frm_insheet的实例中。
Dim frm_name As String = "docktab." & e.Node.Name ‘docktab是命名空间的名字。
Dim nsheet As form = Activator.CreateInstance(Type.GetType(frm_name))
Dim new_uc as usercontrol =Activator.CreateInstance(Type.GetType(frm_name))
nsheet.show
nsheet.controls.add(new_uc) '将usercontrol放到frm_insheet里。
‘问题:这时,我在frm_insheet窗体的closing事件中,如何能访问new_uc实例中的int_statu的值,因为希望在窗体frm_insheet的关闭事件中,希望能捕获frm_insheet这个usercontrol中变量或控件的值,来提示保存,并再执行usercontrol 中的save过程。
说明:我在上面用form代替了第三方的dockingtab是为了您好理解。
如果实现我的想法,这样敲码是不是不对?该如何实现?其实就是我做的一个软件,可以依据功能树,动态加载需要的界面,过去曾用的一个dockpanel,也是第三方的,但它是继承自form,所以,不用这么麻烦再加载usercontrol。帮忙看看,谢谢。