(NET) NET (2019)

<back> 1.2. My typical VB.NET desktop application. MDI environment.

(Login screen, Form menu, Accessibility, Windows management).

This is typical main MDI-application form.



In line 6-15 I define reference of internal forms and in below I manipulate windows (except string 149-156), where I manipulate fonts.

   1:  Imports System.Windows.Forms
   2:   
   3:  Public Class MainMDI
   4:   
   5:   
   6:      Public AD As ActionDetail
   7:      Public ED As EmailsDownloader
   8:      Public EC As EmailCenter
   9:      Public ET As EmailDetail
  10:      Public NE As NewEmailDialog
  11:      Public PN As PeopleDetailNormal
  12:      Public PD As PeopleDirectory
  13:      Public PS As PersonSelector
  14:      Public QM As QuickMenu
  15:      Public EP As EmailPrint
  16:      Public SelectioFontSize As Integer
  17:   
  18:      Public PeopleDetailNormal_IDPerson As Long
  19:      Public TempAppDirectory As String
  20:      Public WithEvents Timer1 As New Timer
  21:      Public LoginForm1 As New Version
  22:   
  23:   
  24:      Private Sub MainMDI_Load(sender As Object, e As EventArgs) Handles Me.Load
  25:          FontSizeToolStripComboBox.SelectedIndex = 4
  26:          Text &= " (" & My.Application.Info.Version.ToString & ")"
  27:          Timer1.Interval = 100
  28:          Timer1.Start()
  29:          EmailCenterToolStripButton1_Click(Nothing, Nothing)
  30:          TempAppDirectory = Me.GetTempDirectory
  31:      End Sub
  32:   
  33:      Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  34:          Timer1.Stop()
  35:          LoginForm1.WindowState = FormWindowState.Normal
  36:          LoginForm1.TopMost = True
  37:          LoginForm1.StartPosition = FormStartPosition.CenterScreen
  38:          LoginForm1.ShowDialog()
  39:      End Sub
  40:   
  41:      Public Sub ShowEmailDownloaderToolStripButton1_Click(sender As Object, e As EventArgs) Handles WindowsShowAllToolStripMenuItem.Click
  42:          If Not (Me.MdiChildren.Any(Function(X) X Is ED)) Then
  43:              ED = ED.OpenAsMDI
  44:          Else
  45:              ED.WindowState = FormWindowState.Normal
  46:              ED.BringToFront()
  47:          End If
  48:      End Sub
  49:   
  50:      Public Sub QuickMenuToolStripButton1_Click(sender As Object, e As EventArgs) Handles QuickMenuToolStripMenuItem.Click
  51:          If Not (Me.MdiChildren.Any(Function(X) X Is QM)) Then
  52:              QM = QM.OpenAsMDI
  53:          Else
  54:              QM.WindowState = FormWindowState.Normal
  55:              QM.BringToFront()
  56:          End If
  57:      End Sub
  58:   
  59:      Public Sub EmailCenterToolStripButton1_Click(sender As Object, e As EventArgs) Handles EmailCenterToolStripMenuItem.Click
  60:          If Not (Me.MdiChildren.Any(Function(X) X Is EC)) Then
  61:              EC = EC.OpenAsMDI
  62:          Else
  63:              EC.WindowState = FormWindowState.Normal
  64:              EC.BringToFront()
  65:          End If
  66:      End Sub
  67:   
  68:      Public Sub EmailPrintToolStripButton1_Click(sender As Object, e As EventArgs) Handles EmailPrintToolStripMenuItem.Click
  69:          If Not (Me.MdiChildren.Any(Function(X) X Is EP)) Then
  70:              EP = EP.OpenAsMDI
  71:          Else
  72:              EP.WindowState = FormWindowState.Normal
  73:              EP.BringToFront()
  74:          End If
  75:      End Sub
  76:   
  77:      Public Sub NewEmailDialogToolStripButton1_Click(sender As Object, e As EventArgs) Handles NewEmailToolStripMenuItem.Click
  78:          If Not (Me.MdiChildren.Any(Function(X) X Is NE)) Then
  79:              NE = NE.OpenAsMDI
  80:          Else
  81:              NE.WindowState = FormWindowState.Normal
  82:              NE.BringToFront()
  83:          End If
  84:      End Sub
  85:   
  86:      Public Sub PersonSelectorToolStripButton1_Click(sender As Object, e As EventArgs) Handles PersonSelectorToolStripMenuItem.Click
  87:          If Not (Me.MdiChildren.Any(Function(X) X Is PS)) Then
  88:              PS = PS.OpenAsMDI
  89:          Else
  90:              PS.WindowState = FormWindowState.Normal
  91:              PS.BringToFront()
  92:          End If
  93:      End Sub
  94:   
  95:      Public Sub PeopleDirectoryToolStripButton1_Click(sender As Object, e As EventArgs) Handles PersonSelectorToolStripMenuItem.Click
  96:          If Not (Me.MdiChildren.Any(Function(X) X Is PD)) Then
  97:              PD = PD.OpenAsMDI
  98:          Else
  99:              PD.WindowState = FormWindowState.Normal
 100:              PD.BringToFront()
 101:          End If
 102:      End Sub
 103:   
 104:      Public Sub ActionDetailToolStripButton1_Click(sender As Object, e As EventArgs) Handles ActionDetailToolStripMenuItem.Click
 105:          If Not (Me.MdiChildren.Any(Function(X) X Is AD)) Then
 106:              AD = AD.OpenAsMDI
 107:          Else
 108:              AD.WindowState = FormWindowState.Normal
 109:              AD.BringToFront()
 110:          End If
 111:      End Sub
 112:   
 113:      Public Sub EmailDetailToolStripButton1_Click(sender As Object, e As EventArgs) Handles EmailDetailToolStripMenuItem.Click
 114:          If Not (Me.MdiChildren.Any(Function(X) X Is ET)) Then
 115:              ET = ET.OpenAsMDI
 116:          Else
 117:              ET.WindowState = FormWindowState.Normal
 118:              ET.BringToFront()
 119:          End If
 120:      End Sub
 121:   
 122:      Public Sub PeopleDetailNormalToolStripButton1_Click(sender As Object, e As EventArgs) Handles PeopleDetailToolStripMenuItem.Click
 123:          If Not (Me.MdiChildren.Any(Function(X) X Is PN)) Then
 124:              PN = PN.OpenAsMDI(PeopleDetailNormal_IDPerson)
 125:          Else
 126:              PN.WindowState = FormWindowState.Normal
 127:              PN.BringToFront()
 128:          End If
 129:      End Sub
 130:   
 131:      Private Sub CloseAllToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles WindowsCloseAllToolStripMenuItem.Click
 132:          For Each ChildForm As Form In Me.MdiChildren
 133:              ChildForm.WindowState = FormWindowState.Minimized
 134:          Next
 135:      End Sub
 136:   
 137:      Private Sub WindowCascadeToolStripButton_Click(sender As Object, e As EventArgs) Handles WindowCascadeToolStripMenuItem.Click
 138:          Me.LayoutMdi(MdiLayout.Cascade)
 139:      End Sub
 140:   
 141:      Private Sub WindowsVerticalToolStripButton_Click(sender As Object, e As EventArgs) Handles WindowsVerticalToolStripMenuItem.Click
 142:          Me.LayoutMdi(MdiLayout.TileVertical)
 143:      End Sub
 144:   
 145:      Private Sub WindowsHorizontalToolStripButton_Click(sender As Object, e As EventArgs) Handles WindowsHorizontalToolStripMenuItem.Click
 146:          Me.LayoutMdi(MdiLayout.TileHorizontal)
 147:      End Sub
 148:   
 149:      Public FontSize As String
 150:      Private Sub FontSizeToolStripComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FontSizeToolStripComboBox.SelectedIndexChanged
 151:          FontSize = FontSizeToolStripComboBox.Text
 152:          Me.SetFontSize(FontSize)
 153:          For Each X In Me.MdiChildren.ToList
 154:              X.SetFontSize(FontSize)
 155:          Next
 156:      End Sub
 157:   
 158:      Public Sub WindowsShowAllToolStripButton_Click(sender As Object, e As EventArgs) Handles WindowsShowAllToolStripMenuItem.Click
 159:          ShowEmailDownloaderToolStripButton1_Click(Nothing, Nothing)
 160:          QuickMenuToolStripButton1_Click(Nothing, Nothing)
 161:          EmailCenterToolStripButton1_Click(Nothing, Nothing)
 162:          EmailPrintToolStripButton1_Click(Nothing, Nothing)
 163:          NewEmailDialogToolStripButton1_Click(Nothing, Nothing)
 164:          PersonSelectorToolStripButton1_Click(Nothing, Nothing)
 165:          PeopleDirectoryToolStripButton1_Click(Nothing, Nothing)
 166:          ActionDetailToolStripButton1_Click(Nothing, Nothing)
 167:          EmailDetailToolStripButton1_Click(Nothing, Nothing)
 168:          PeopleDetailNormalToolStripButton1_Click(Nothing, Nothing)
 169:      End Sub
 170:   
 171:  End Class

For accessing to font I use extension function


  11:      <Extension()>
  12:      Public Sub SetFontSize(CurForm As Form, FontSize As String)
  13:          Dim FormControlList = (From Z In CurForm.Controls Select Z).ToList
  14:          Select Case FontSize
  15:              Case "8" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_8)
  16:              Case "8,5" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_8_5)
  17:              Case "9" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_9)
  18:              Case "9,5" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_9_5)
  19:              Case "10" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_10)
  20:              Case "10,5" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_10_5)
  21:              Case "11" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_11)
  22:              Case "11,5" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_11_5)
  23:              Case "12" : FormControlList.ForEach(Sub(X) X.Font = Cuprum_Regular_12)
  24:          End Select
  25:      End Sub

And form control I also encapsulating in extension.


   1:  Imports System.Runtime.CompilerServices
   2:   
   3:  Module MDIExtensions
   4:   
   5:      <Extension()>
   6:      Public Function OpenAsMDI(X As EmailsDownloader) As EmailsDownloader
   7:          OpenAsMDI = New EmailsDownloader
   8:          OpenAsMDI.MdiParent = MainMDI_Instance
   9:          OpenAsMDI.Show()
  10:          OpenAsMDI.BringToFront()
  11:      End Function
  12:   
  13:      <Extension()>
  14:      Public Function OpenAsMDI(X As ActionDetail) As ActionDetail
  15:          OpenAsMDI = New ActionDetail
  16:          OpenAsMDI.MdiParent = MainMDI_Instance
  17:          OpenAsMDI.Show()
  18:          OpenAsMDI.BringToFront()
  19:      End Function
  20:   
  21:      <Extension()>
  22:      Public Function OpenAsMDI(X As EmailCenter) As EmailCenter
  23:          OpenAsMDI = New EmailCenter
  24:          OpenAsMDI.MdiParent = MainMDI_Instance
  25:          OpenAsMDI.Show()
  26:          OpenAsMDI.BringToFront()
  27:      End Function
  28:   
  29:      <Extension()>
  30:      Public Function OpenAsMDI(X As EmailDetail) As EmailDetail
  31:          OpenAsMDI = New EmailDetail
  32:          OpenAsMDI.MdiParent = MainMDI_Instance
  33:          OpenAsMDI.Show()
  34:          OpenAsMDI.BringToFront()
  35:      End Function
  36:   
  37:      <Extension()>
  38:      Public Function OpenAsMDI(X As NewEmailDialog) As NewEmailDialog
  39:          OpenAsMDI = New NewEmailDialog
  40:          OpenAsMDI.MdiParent = MainMDI_Instance
  41:          OpenAsMDI.Show()
  42:          OpenAsMDI.BringToFront()
  43:      End Function
  44:   
  45:   
  46:      <Extension()>
  47:      Public Function OpenAsMDI(X As PeopleDetailNormal, PeopleDetailNormal_IDPerson As Long) As PeopleDetailNormal
  48:          OpenAsMDI = New PeopleDetailNormal
  49:          OpenAsMDI.IDPerson = PeopleDetailNormal_IDPerson
  50:          OpenAsMDI.MdiParent = MainMDI_Instance
  51:          OpenAsMDI.Show()
  52:          OpenAsMDI.BringToFront()
  53:      End Function
  54:   
  55:      <Extension()>
  56:      Public Function OpenAsMDI(X As PeopleDirectory) As PeopleDirectory
  57:          OpenAsMDI = New PeopleDirectory
  58:          OpenAsMDI.MdiParent = MainMDI_Instance
  59:          OpenAsMDI.Show()
  60:          OpenAsMDI.BringToFront()
  61:      End Function
  62:   
  63:      <Extension()>
  64:      Public Function OpenAsMDI(X As PersonSelector) As PersonSelector
  65:          OpenAsMDI = New PersonSelector
  66:          OpenAsMDI.MdiParent = MainMDI_Instance
  67:          OpenAsMDI.Show()
  68:          OpenAsMDI.BringToFront()
  69:      End Function
  70:   
  71:      <Extension()>
  72:      Public Function OpenAsMDI(X As QuickMenu) As QuickMenu
  73:          OpenAsMDI = New QuickMenu
  74:          OpenAsMDI.MdiParent = MainMDI_Instance
  75:          OpenAsMDI.Show()
  76:          OpenAsMDI.BringToFront()
  77:      End Function
  78:   
  79:   
  80:      <Extension()>
  81:      Public Function OpenAsMDI(X As EmailPrint) As EmailPrint
  82:          OpenAsMDI = New EmailPrint
  83:          OpenAsMDI.MdiParent = MainMDI_Instance
  84:          OpenAsMDI.Show()
  85:          OpenAsMDI.BringToFront()
  86:      End Function
  87:   
  88:      <Extension()>
  89:      Public Function OpenAsMDI(X As EmailHeaders, Headers As MimeKit.HeaderList) As EmailHeaders
  90:          OpenAsMDI = New EmailHeaders
  91:          OpenAsMDI.Headers = Headers
  92:          OpenAsMDI.MdiParent = MainMDI_Instance
  93:          OpenAsMDI.Show()
  94:          OpenAsMDI.BringToFront()
  95:      End Function
  96:   
  97:  End Module

Also this code request login screen. In this case this is simple dummy form with dummy login/password.



Also I use the same way of creating new windows is any place of my application, for example.


 188:      Private Sub GetHeadersLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles GetHeadersLinkLabel.LinkClicked
 189:          If Not (MainMDI_Instance.MdiChildren.Any(Function(X) X Is EH)) Then
 190:              EH = EH.OpenAsMDI(MailHeaders)
 191:          Else
 192:              EH.WindowState = FormWindowState.Normal
 193:              EH.BringToFront()
 194:          End If
 195:      End Sub

In this case MDI-form has call with parameters.


   1:  Public Class EmailHeaders
   2:      Public Property Headers As MimeKit.HeaderList
   3:   
   4:      Private Sub EmailHeaders_Load(sender As Object, e As EventArgs) Handles Me.Load
   5:          Dim X As New ArrayList
   6:          For I As Integer = 0 To Headers.Count - 1
   7:              X.Add(New With {.Name = Headers(I).Field, .Value = Headers(I).Value})
   8:          Next
   9:          DataGridView1.DataSource = X
  10:      End Sub
  11:  End Class


Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/Samantha/MDI.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>