jwcoleman87
Well-known member
- Joined
- Oct 4, 2014
- Messages
- 124
- Programming Experience
- Beginner
I have this form which is designed to be a home page of sorts for other forms and modules. The trick is that the user logging in to this home page will have access to modules based off of what they are given as defined in the database. So, depending on what kind of access they have they need buttons to be able to open the different modules (other forms n such). I have devised a way to do this by using a flow layout panel and a bunch of dummy buttons (24 to be exact). All of these buttons are invisible until set visible when the text for the button is changed to the name of a corresponding module. Every single button connects to a single event handler that compares the button text to the name of a module, and executes it. It's like this:

And the code looks like this:
I guess my question to the general discussion of vbdotnetforums is simple, are there more efficient ways of accomplishing this task?

And the code looks like this:
Public Class LandingZone
Dim User As String
Dim Workstation As String
Dim Position As String
'Need to grab a list of all modules, need to match modules with name
Private Sub LandingZone_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Using db As New ProductionDataModelDataContext
Dim loginform As New Login()
If loginform.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
Me.User = loginform.txtUserName.Text
Me.lblName.Text = Me.User
Dim job = From uj In db.TTUserJobs _
Join u In db.TTUsers On uj.UserID Equals u.TTUserID _
Join j In db.TTJobs On uj.JobID Equals j.JobID _
Where u.TTUserID = Me.User AndAlso j.JobID = uj.JobID _
Select j.JobTitle
Me.Position = job.First
Me.lblPosition.Text = Me.Position
ShowAvailableModules()
lblWorkstation.Text = Environment.MachineName
Me.Show()
Me.Enabled = True
End If
End Using
End Sub
Private Sub MatchButtonWithModule(buttonText As String)
'IF the BUTTON TEXT is blahblahblah THEN
If buttonText = "Repair" Then
Dim TechProductionTracker As New TechInterface(Me.User, Me.Position)
TechProductionTracker.Show()
Me.Visible = False
ElseIf buttonText = "Lead Production Tracker" Then
LeadInterface.Show()
Me.Visible = False
Else
MsgBox("Module not yet supported.")
End If
'DO SOME STUFF
'ELSE IF the button name is derpderpderp THEN
'DO SOME OTHER STUFF
'DO THIS CRAP OVER AND OVER FOR EACH MODULE
End Sub
Private Sub ShowAvailableModules()
Using db As New ProductionDataModelDataContext
'for this magic to happen, accessiblemodules must be created within this function
Dim AccessibleModules = From m In db.TTModules _
Join jm In db.TTJobModules On m.ModuleID Equals jm.ModuleID _
Join j In db.TTJobs On jm.JobTitle Equals j.JobTitle _
Join uj In db.TTUserJobs On j.JobID Equals uj.JobID _
Join u In db.TTUsers On uj.UserID Equals u.TTUserID _
Where u.TTUserID = Me.User _
Select m.ModuleName
Dim index As Integer = 0
Do While index < AccessibleModules.ToList().Count
FlowLayoutPanel1.Controls.Item(index).Text = AccessibleModules(index)
FlowLayoutPanel1.Controls.Item(index).Visible = True
index += 1
Loop
'FOR AS MANY MODULES AVAILABLE LOOP THROUGH buttons in FLOWLAYOUTPANEL
'SET BUTTON TEXT to INDEX OF MODULE NAME
'SET BUTTON TO VISIBLE
End Using
End Sub
Private Sub ButtonMagic(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, _
Button5.Click, Button6.Click, Button7.Click, Button8.Click, _
Button9.Click, Button10.Click, Button11.Click, Button12.Click, _
Button13.Click, Button14.Click, Button15.Click, Button16.Click, _
Button17.Click, Button18.Click, Button19.Click, Button20.Click, _
Button21.Click, Button22.Click, Button23.Click, Button24.Click
MatchButtonWithModule(sender.text)
End Sub
End Class
I guess my question to the general discussion of vbdotnetforums is simple, are there more efficient ways of accomplishing this task?