【问题标题】:dynamic database driven menus in VB.NetVB.Net 中的动态数据库驱动菜单
【发布时间】:2009-11-15 22:52:06
【问题描述】:

我正在尝试构建一个数据库驱动的 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 不喜欢传递数据,所以这不起作用...

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

在开始我认为会做大量工作之前,我是否遗漏了什么?他们是做我想做的事情的简单方法吗?或者如果不是,子类化 ContextMenuStrip 是否会起作用,如果没有关于什么会起作用的任何想法(如果会,关于如何开始学习如何做到这一点的任何想法)

【问题讨论】:

    标签: vb.net dynamic menu address-operator


    【解决方案1】:

    封装用户信息的一种简单方法是使用帮助类,您可以在其中存储上下文信息。

    
    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
    

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

    【讨论】:

    • 啊哈,谢谢,今晚我会试一试(英国时间)
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2011-07-04
    • 2013-06-19
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多