Динамическое меню на основе базы данных в VB.Net

Я пытаюсь создать приложение VB.Net, управляемое базой данных, которое извлекает список зарегистрированных учетных записей из базы данных и отображает имена пользователей учетных записей в меню, чтобы пользователь мог выбрать одну и открыть новую форму (где они работают с ней).).

то, что у меня пока есть конструктор для родительского окна 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 не нравится передавать данные, это не работает...

Я посмотрел на делегаты и выражения ленд, но не думаю, что кто-то из них делает то, что мне нужно, другой вариант - создать свой собственный подкласс класса ContextMenuStrip, который 1) обрабатывает щелчки так, как я хочу, и 2) звучит как кошмар.

Прежде чем я приступлю к тому, что, по моему мнению, будет адской работой, я что-то упустил? это простой способ сделать то, что я хочу сделать? или, если нет, будет работать подклассификация ContextMenuStrip, и если нет каких-либо идей относительно того, что будет (и если будет, какие-либо идеи относительно того, как начать изучать, как это сделать)

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

Вы можете улучшить вспомогательный класс, добавив ссылку на базу данных в конструкторе и получая информацию о пользователе, когда пользователь нажимает на эту опцию.

Другие вопросы по тегам