none
动态创建form的实例,在form中又动态加载了一个usercontrl,在form的closeing事件中,如何访问usercontrl中的变量值。 RRS feed

  • 问题

  • 提出该问题的原因是,用了一个第三方的组件,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。帮忙看看,谢谢。

    2017年5月26日 9:47

全部回复

  • Hi nswdwy,

    根据你的描述,你首先需要新建一个user control的自定义控件, 然后在MDI主窗体frm_mdi中的任何一个事件里new 一个窗体frm_insheet, 然后你可以用一下代码加载自定义控件。

    请参考一下代码。

    Form3:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim frm As New Form4
            frm.Show()
            Dim usercontrol As New UserControl1
            usercontrol.Location = New Point(10, 10)
            usercontrol.Size = New Size(300, 300)
            frm.Controls.Add(usercontrol)
        End Sub

    Form4:

     Dim a As New Integer
            Dim usercontrol As New UserControl1
    
            a = usercontrol.a
            MessageBox.Show(a)

    Best Regards,

    Cherry


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年6月2日 8:37
    版主