当前位置: 代码迷 >> VB Dotnet >> 变量名替代窗体名称,操作窗体中的事件
  详细解决方案

变量名替代窗体名称,操作窗体中的事件

热度:132   发布时间:2016-04-25 02:02:49.0
变量名代替窗体名称,操作窗体中的事件
有一个工程有很多的窗体,如Form1,Form2,Form3........,FormN
目的,利用 一个模块为每个窗体动态添加工具栏(每个窗体的工具栏按钮不同,从数据库中抓取)
部分代码如下:
Public Class Form1
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        g_prog = Me.Name
        Call ProgramDefault()  '程式预设
    End Sub
     .............
End Class

Module FormSet
    Public Sub ProgramDefault
     ..........
        For l_i = 0 To UBound(l_barname)
            l_text = Split(l_barname(l_i), "~")(0)
            l_image = Split(l_barname(l_i), "~")(1) & ".png"
            tsi = New ToolStripButton
            With tsi
                .Text = l_text
                .Image = Main.ImageList.Images.Item(l_image)
                 ........
            End With

            Dim tempForm As Form1= CType(Application.OpenForms("Form1"), Form1)
            tempForm.ToolStrip.Items.Add(tsi)
     next
   END sub
    ............
EMD Module
代码中后面的部分就是设定tempForm = Form1,再去设定Form1中的toolstrip

请问有没有办法将tempForm定义成一个公用的窗体变量,实现以下功能:
dim tempForm AS new Form    '这个定义方法已经试过了,不行
tempForm = g_prog        'g_prog是全局变量,记录窗体的名称,在每个窗体开启时取得   g_prog = me.name
tempForm.ToolStrip.Items.Add(tsi)    '将窗体的工具栏显示出来

------解决思路----------------------
方法定义
sub setToolItems(f as form)
  在这里为f添加工具栏栏目
..........
end sub

调用

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       
       setToolItems(sender)
End Sub

试试看
------解决思路----------------------
继承啊!继承!

做个基类窗体 ToolFormBase,上面有个 ToolStrip。
所有的 Form1,Form2,Form3........,FormN 去掉各自的 ToolStrip,改为从 ToolFormBase 继承。
'这样就没问题了'
            Dim tempForm As ToolFormBase = CType(Application.OpenForms("Form1"), ToolFormBase)
            tempForm.ToolStrip.Items.Add(tsi)
  相关解决方案