我正在尝试构建一个数据库驱动的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进行分类工作,如果没有任何想法将会是什么(如果有的话,任何关于如何开始学习如何做的想法)
答案 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
您可以改进辅助类,在构造函数中添加对数据库的引用,并在用户单击选项时检索用户信息。