VB.Net中的动态数据库驱动菜单

时间:2009-11-15 22:52:06

标签: vb.net dynamic menu address-operator

我正在尝试构建一个数据库驱动的VB.Net应用程序,它从数据库中提取已注册帐户的列表,并在菜单中显示throes帐户的用户名,以便用户可以选择一个并打开一个新表单(他们在哪里与它一起工作)。

到目前为止我所拥有的是MDI父窗口的构造函数

Public Sub New()

    InitializeComponent()

    Dim tsmi As New ToolStripMenuItem("Users", Nothing, AddressOf users_mousedown)
    MenuStrip1.Items.Add(tsmi)

End Sub

用户菜单的处理程序(其中SQLite_db是一个监视数据库的类,user_class是一个包含两个项目(用户名和密码)作为字符串的类。

Sub users_mousedown()

    Dim submenu As New ContextMenuStrip
    Dim database As New SQLite_db

    Dim user_list As New List(Of user_class)
    user_list = database.List_Users

    For Each user As user_class In user_list
        submenu.Items.Add(user.username, Nothing, AddressOf Open_new_window(user))
    Next

    submenu.Items.Add("Add new user", Nothing, AddressOf AddNew)
    submenu.Show(Control.MousePosition)

End Sub

我想要发生的是当用户点击上下文菜单时,会创建一个新的MDI子表单并传递用户中的数据,但是因为AddressOf不喜欢传递数据,所以这不起作用... < / p>

我查看了委托和landa表达式,但不认为它们中的任何一个都能满足我的要求,另一个选择是创建我自己的ContextMenuStrip类的子类,1)以我想要的方式处理点击2)听起来像是一场噩梦。

在我开始进入我认为很多工作之前,我错过了什么?是他们做我想做的简单方法吗?或者如果没有,将对ContextMenuStrip进行分类工作,如果没有任何想法将会是什么(如果有的话,任何关于如何开始学习如何做的想法)

1 个答案:

答案 0 :(得分:2)

封装用户信息的一种简单方法是使用Helper类来存储上下文信息。


Public Class Question1739163
    Class HelperUserCall
        Public userId As String

        Sub New(ByVal id As String)
            userId = id
        End Sub

        Public Sub OnClick()
            MsgBox(Me.userId)
        End Sub
    End Class
    Private Sub Question1739163_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim t As New ToolStripMenuItem("Users", Nothing, AddressOf user_mousedown)
        MenuStrip1.Items.Add(t)
    End Sub

    Public Sub user_mousedown()
        Dim s As New ContextMenuStrip
        Dim a As HelperUserCall

        a = New HelperUserCall("u1")
        s.Items.Add(a.userId, Nothing, AddressOf a.OnClick)

        a = New HelperUserCall("u2")
        s.Items.Add(a.userId, Nothing, AddressOf a.OnClick)

        s.Items.Add("New User", Nothing, AddressOf add_new)
        s.Show(Control.MousePosition)
    End Sub

    Sub add_new()
        MsgBox("add new")
    End Sub
End Class

您可以改进辅助类,在构造函数中添加对数据库的引用,并在用户单击选项时检索用户信息。