Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net中的动态数据库驱动菜单_Vb.net_Dynamic_Menu_Address Operator - Fatal编程技术网

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

VB.Net中的动态数据库驱动菜单,vb.net,dynamic,menu,address-operator,Vb.net,Dynamic,Menu,Address Operator,我正在尝试构建一个数据库驱动的VB.Net应用程序,它从数据库中提取一个注册帐户列表,并在菜单中显示throes帐户的用户名,这样用户就可以选择一个并打开一个新表单(在那里他们使用它) 到目前为止,我拥有的是MDI父窗口的构造函数 Public Sub New() InitializeComponent() Dim tsmi As New ToolStripMenuItem("Users", Nothing, AddressOf users_mousedown) Me

我正在尝试构建一个数据库驱动的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\u db
是一个处理数据库的类,
user\u 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进行子分类是否可行,如果没有任何关于将要做什么的想法(如果可以,还有关于如何开始学习如何做的想法)

封装用户信息的一种简单方法是使用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

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

aha,谢谢,今晚(英国时间)我将试一试