Mitgliederverwaltung - Hilfe bei der Erstellung sauberen Codes

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 244 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    Na, die Textbox soll ja nicht selektiert werden.
    Ich habe zu diesem isolierten Problem mal einen neuen Thread eröffnet.
    @VaporiZed sagt dazu:
    ​Ok, also grundsätzlich ist das Problem, das frmMain die Eingaben auf Wunsch erhält. Aber niemals das MDIChild. Dementsprechend müsstest Du wohl die Eingaben über frmMain laufen lassen und diese dann MDIChild-abhängig auswerten.

    Die Lösung ist also:

    VB.NET-Quellcode

    1. Select Case True
    2. Case Me.ActiveMdiChild Is frmFinishOrder
    3. 'mach was auf frmFinishOrder
    4. Case Me.ActiveMdiChild Is frmKunden
    5. If Not frmKunden.tbCustomerSearch.Focused Then frmKunden.tbCustomerSearch.AppendText(e.KeyChar)
    6. End Select
    Jo, liegt aber ja wie ich vermutet hatte am Focus. Den erhält die Textbox auch mit Select(). Ist ja irgendwie logisch, woher soll das Programm
    auch wissen, wohin deine Tastatureingaben landen sollen.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    DerSmurf schrieb:

    Alles klar.
    Dann warten wir Mal was @tragl zur Instanzierung der Forms sagt.
    Von ihm ist ja schließlich der Code.


    Hi, sitz' gerade an einem anderen Projekt, wo ich tatsächlich mehrfach das "gleiche" Child brauche - mit unterschiedlichen Daten.
    Hab' daher die Instanziierung mal eingebaut:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. #Region "TabbedMdi"
    2. ''' <summary> Anzeigen einer ChildForm - Optional mit ControlStyling und Registrierung des DataSets, sowie verstecken des TreeView nach Öffnen der Form und App-Icon</summary>
    3. Public Sub ShowMdiLocal(Of T As {Form, New})(Optional CtrlStyling As Boolean = True)
    4. Dts.SaveDts() 'Beim Wechsel zwischen den Forms immer speichern, damit es keine Datenverluste / inkonsistente Daten gibt
    5. RegisterMdiHandleLocal() ' Registrierung der Handle-Methoden
    6. Dim child = New T
    7. With child
    8. If .MdiParent Is Me Then
    9. .Select()
    10. Else
    11. .MdiParent = Me
    12. .MdiParent.SuspendLayout()
    13. Dts.Register(.Self, False)
    14. If CtrlStyling = True Then ControlStyling.StyleDGV(.Self) ' Optional: eine Erweiterung von ErfinderDesRades: Styled das DGV auf der Form
    15. .WindowState = FormWindowState.Maximized ' Je nach Anwendungsfall entweder alle Childs maximiert öffnen, oder nur das 1.
    16. #If False Then
    17. If Me.MdiChildren.Count = 0 Then .WindowState = FormWindowState.Maximized
    18. #End If
    19. .Icon = App.Icon
    20. .MinimizeBox = False 'Minimize-Boxen auf Child-Forms finde ich unnötig
    21. .KeyPreview = True
    22. .Show()
    23. 'idiotischerweise muss der ChildForm-Menustrip, dessen Items einerseits automatisch in den Parent-Menustrip
    24. ' eingemerged werden, andererseits explizit versteckt werden - sonst verbleibt ein leerer Menustrip auffm ChildForm
    25. child.Controls.OfType(Of MenuStrip)().SingleOrDefault()?.Hide()
    26. .MdiParent.ResumeLayout()
    27. gbKasse.MdiNaviHide
    28. End If
    29. End With
    30. End Sub
    31. ''' <summary> Registriert die Handle-Methoden für die Steuerung der Child-Forms </summary>
    32. Private Sub RegisterMdiHandleLocal()
    33. RemoveHandler MdiChildActivate, AddressOf MdiChildOpenLocal
    34. RemoveHandler tabMdi.SelectedIndexChanged, AddressOf Tab_SelectedIndexChangedLocal
    35. AddHandler MdiChildActivate, AddressOf MdiChildOpenLocal
    36. AddHandler tabMdi.SelectedIndexChanged, AddressOf Tab_SelectedIndexChangedLocal
    37. End Sub
    38. ''' <summary> Stellt beim Schließen des Childs sicher, dass die entsprechende TabPage entfernt wird </summary>
    39. Private Sub MdiChildCloseLocal(sender As Object, e As FormClosedEventArgs)
    40. DirectCast(DirectCast(sender, Form).Tag, TabPage).Dispose()
    41. If MdiChildren.Count <= 1 Then gbKasse.MdiNaviShow
    42. End Sub
    43. ''' <summary> Prüft, ob das Child bereits existiert, falls nicht wird eine neue TabPage erstellt </summary>
    44. Private Sub MdiChildOpenLocal(sender As Object, e As EventArgs)
    45. If ActiveMdiChild Is Nothing Then
    46. tabMdi.Visible = False
    47. Else
    48. Dim tp = DirectCast(ActiveMdiChild.Tag, TabPage)
    49. If tp Is Nothing Then
    50. tp = New TabPage(ActiveMdiChild.Text)
    51. tp.Tag = ActiveMdiChild
    52. ActiveMdiChild.Tag = tp
    53. tabMdi.TabPages.Add(tp)
    54. AddHandler ActiveMdiChild.FormClosed, AddressOf MdiChildCloseLocal
    55. If Not tabMdi.Visible Then tabMdi.Visible = True
    56. End If
    57. tabMdi.SelectedTab = tp
    58. End If
    59. End Sub
    60. ''' <summary> Ruft beim wechseln der TabPage das entsprechende Child auf und zeigt es an</summary>
    61. Private Sub Tab_SelectedIndexChangedLocal(sender As Object, e As EventArgs)
    62. Dts.SaveDts()
    63. DirectCast(tabMdi.SelectedTab?.Tag, Form)?.Select()
    64. End Sub
    65. #End Region 'TabbedMdi


    Aufruf muss dann geändert werden: ShowMdiLocal(Of frmKasse)()
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: