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.

    DerSmurf schrieb:

    Was bedeutet das hier? Eben doch nicht das "normale" ​Dim Settings as new frmSettings / Settings.showdialog
    Doch, genau das. Ein Form 1 erzeugt eine Instanz eines anderen Forms 2. Damit ist die Form-2-Instanz nur der Wert einer lokalen Variable von Form 1. Damit ist die Form-2-Instanz eine SubForm aus der Sicht von Form 1. So definiere ich es.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ah OK. dann hab ichs doch richtig verstanden.
    Also habe ich doch drei Möglichkeiten:

    1. UserControls - wenig empfehlenswert, wenn ich hier je nur eine Instanz von verwende
    2. und 3. eigene Forms für das Zeug was ausgegliedert gehört. Diese dann 2.mit MDI innerhalb der Form anzuzeigen, oder 3. mit Form.Show als eigene Fenster anzeigen zu lassen.
    Also beschäftige ich mich doch mal mit MDI, denn das finde ich (zumindest hier) schöner als eigene Fensterchen

    DerSmurf schrieb:

    Das große graue Feld kann ich aber nicht anklicken. Was ist das?

    Das ist der Tab-Reiter vom TabControl. Es sind keine TabPages vorhanden, also wird da nix angezeigt. Das TabControl ist aber mit "Top" gedockt, das leere Fensterchen verschwindet also zur Laufzeit. (ist auch logisch, weil .Visible = False für das TabControl)
    Der Menustrip deiner Childs wird auf der frmMain mit dessen MenuStrip zusammengemerged (kannste ja schnell mal ausprobieren, wie das aussieht)

    DerSmurf schrieb:

    Und ich musste, bevor dein Projekt lauffähig ist, aus der Resx Datei dei RessourcenBilder entfernen, weil diese nicht gefunden wurden.

    Jo, da hab ich einfach deine Images aus dem Ordner genommen und im Projekt eingebunden, damit ich die über My.Resources.... griffbereit hab. Dann brauchste die net überall manuell im Designer einfügen.

    DerSmurf schrieb:

    schöner als eigene Fensterchen

    das sehe ich genauso. In deinem Anwendungsfall sehe ich das sogar noch eher so, weil du ja mit Stifteingabe (Touch) arbeiten willst. Da solltest du Dialoge / Popups nur nutzen, wo auch sinnvoll.

    Wenn du Fragen zum Mdi hast, meld' dich. Ich würde dir aber empfehlen, dir das einfach mal genau anzugucken -sooo kompliziert is das nicht. Und deine Grafiken würd' ich dir raten in die Resources reinzupacken. Warum der die nicht mit übernommen hat,
    beim Zippen frag' ich mich grad selbst.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tragl“ ()

    tragl schrieb:

    Jo, da hab ich einfach deine Images aus dem Ordner genommen und im Projekt eingebunden, damit ich die über My.Resources.... griffbereit hab

    Aber die sind in meinem Download nicht zugreifbar. Ich habe sie aus der Resx Datei entfernen müssen, damit die Solution kompiliert.

    tragl schrieb:

    (kannste ja schnell mal ausprobieren, wie das aussieht)

    Damit ist die Solution dann lauffähig - aber ohne dass sich im MenuStrip was tut. Das Ding bleibt leer.

    DerSmurf schrieb:

    aber ohne dass sich im MenuStrip was tut. Das Ding bleibt leer.


    ... geht doch. ICh hab einfach ne neue Form angelegt und der ein Menustrip mit Standard-Einträgen verpasst.
    Die ist nun geöffnet über Mdi und dessen Menustrip vereint sich mit dem von frmMain (das MenuStrip von frmMain beinhaltet ja nur dein Häuschen als Grafik und dient als "Home-Button")



    EDIT: hier übrigens mal ohne die Tab-Buttons und die Control-Boxes:


    TabControl-Dock entfernen, den grauen Kasten auf den Menustrip schieben und rechtsklick -> in den Hintergrund
    Im Code vom Mdi folgendes hinzufügen / auskommentieren bzw. entfernen oder so übernehmen:

    VB.NET-Quellcode

    1. ''' <summary> Anzeigen einer ChildForm - Optional mit ControlStyling und Registrierung des DataSets, sowie verstecken des TreeView nach Öffnen der Form und App-Icon</summary>
    2. <Extension>
    3. Public Sub ShowMdiChild(Child As Form)
    4. RegisterMdiHandle() ' Registrierung der Handle-Methoden
    5. With Child
    6. If .MdiParent Is App._mdiParent Then
    7. .Select()
    8. Else
    9. With App._tabControl
    10. .SizeMode = TabSizeMode.Fixed
    11. .ItemSize = New Size(0, 1)
    12. End With
    13. App._mdiParent.SuspendLayout()
    14. Dts.Register(.Self, False) ' Optional nur mit den Helpers von ErfinderDesRades: Registriert das DataSet auf der Form
    15. ControlStyling.StyleControls(.Self)
    16. .WindowState = FormWindowState.Maximized ' Je nach Anwendungsfall entweder alle Childs maximiert öffnen, oder nur das 1.
    17. #If False Then
    18. If _mdiParent.MdiChildren.Count = 0 Then .WindowState = FormWindowState.Maximized
    19. #End If
    20. '.Icon = App.Icon
    21. .ShowIcon = False
    22. .ControlBox = False
    23. .MdiParent = App._mdiParent
    24. .MinimizeBox = False 'Minimize-Boxen auf Child-Forms finde ich unnötig
    25. .KeyPreview = True
    26. .Show()
    27. 'idiotischerweise muss der ChildForm-Menustrip, dessen Items einerseits automatisch in den Parent-Menustrip
    28. ' eingemerged werden, andererseits explizit versteckt werden - sonst verbleibt ein leerer Menustrip auffm ChildForm
    29. Child.Controls.OfType(Of MenuStrip)().SingleOrDefault()?.Hide()
    30. App._mdiParent.ResumeLayout()
    31. End If
    32. End With
    33. End Sub
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tragl“ ()

    Bei meiner deiner Solution nicht.
    Hab ein paar Bilder angehängt.
    Bilder
    • Unbenannt.png

      107,42 kB, 1.920×1.080, 33 mal angesehen
    • Unbenannt1.png

      117,59 kB, 1.920×1.080, 33 mal angesehen
    • resX.png

      268,69 kB, 1.920×1.080, 34 mal angesehen
    • runtime.png

      174,45 kB, 1.920×1.080, 42 mal angesehen

    DerSmurf schrieb:

    Bei meiner deiner Solution nicht.


    dann entfern in den Projekteigentschaften die Bilder und Symbole und zieh die aus deinem Explorer neu da rein.
    Einzige Änderung die ich machen musste: ich musste dein App-Icon auf 16x16 verkleinern, sonst sprengt das die Form komplett.
    Sonst biete ich dir das hier nochmal an, bevor das etliche Posts hin- und her geht:
    Wir können gerne ne telefon/skype/teamviewer oder was auch immer Sitzung machen (aber morgen erst) dann gucken wir grad dabei.
    Bilder
    • unbenannt.png

      33,11 kB, 2.454×343, 42 mal angesehen
    Dateien
    • Icon_16x16.ico

      (894 Byte, 23 mal heruntergeladen, zuletzt: )
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Oh ja. Das klappt. Die Lösung war zu einfach :)
    Auch das verbergen der Tab Reiter klappt Mega!
    Ich werde mir morgen den Code dahinter zu Gemüte führen und versuchen das ganze in meiner Solution unterzubringen.
    Macht zwar nicht so den Sinn, aber sollte mir beim Codeverständnis helfen.
    Außerdem habe ich mir überlegt, die Startseite zu entfernen und die Verkaufsseite beim Start anzeigen.
    Die Buttons zum zeigen der anderen Forms (Einstellungen, Adressen, usw.) können ja ins MenüStrip wandern.

    Aber jetzt mag ich erstmal nicht mehr.
    Melde mich die Tage.

    Bishierhin erstmal vielen Dank :)

    DerSmurf schrieb:

    Verkaufsseite beim Start anzeigen.

    jo, da brauchst ja nur den Aufruf im load-event der frmMain abzuändern. Das mdi-gedöns muss aber in ein Modul ausgelagert werden, weil du ggf. von den childs aus ein neues Child anzeigen lassen willst. Bei mir hab ich sowas nicht,
    weshalb ich den Kram auf meiner frmMain rumfliegen hab.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    DerSmurf schrieb:

    Das heißt du nutzt eigentlich immer mdi für einmalig vorkommende Dinge?
    Und @ErfinderDesRades nutzt scheinbar immer ucl?
    Ich weiß immer nicht, was ich tun soll, wenn zwei Menschen mir was unterschiedliches raten :)
    Tja, Pech - hier liegen numal zwei verschiedene Ansätze vor.
    Jo - EDR verwendet immer ucl. MDI und MDI-ChildForms hälter für konzeptionellen Murks.
    Tragl hat sich da Infrastruktur hinzugebastelt, der den Murks deaktiviert, sodass seine MDIChilds vom prinzip her agieren wie ucls.

    Der Kern der Technologien ist derselbe: Sowohl ein Form als auch ein Ucl ist eine geschlossene eigenständige Einheit, wo man Gui-Funktionalität höchst sinnvoll und anschaulich thematisch zusammenfassen kann, und so verschiedene "Themen" eben auch auseinanderhalten.
    Beides wird im Form-Designer designed, und zugehörige Logik im Codebehind entwickelt.
    Tatsächlich sind die Unterschiede marginal: Im DesignerCode steht bei Forms Inherits System.Windows.Forms.Form und bei Ucl steht Inherits System.Windows.Forms.UserControl.
    Dieser kleine Unterschied bewirkt die Verhaltens-Unterschiede:
    Ein Form kannste öffnen, schliessen, minimieren, maximieren, verschieben und resizen.
    Diese Dinge: öffnen, schliessen, minimieren, maximieren, verschieben, resizen - sind bei einem Ucl nicht gewollt. Ich will das Ucl auffm Tab haben, und zwar da, wo ichs hintu - soll mir keiner schliessen, resizen oder sonstwas.

    Was fürs Form gilt, gilt auch fürs MDI-ChildForm - nur statt auffm Bildschirm zu agieren, ist ein MdiChild im Mdi-Bereich des Mdi-ParentForms "gefangen".
    Tragls Infrastruktur deaktiviert nun alle die unerwünschten Form-Features, und zeigt die MdiChildren immer als Maximized an.
    Jo - kommt im Ergebnis fast dasselbe raus wie bei einem TabControl versteckten Reitern, mit je TabPage ein Ucl.

    Ein Unterschied der Tragl-MdiChilds zu TabControl-Ucls ist, dass bei Tragl die MdiChilds immer geschlossen und neu erzeugt werden.
    Während TabControl-Ucls wie gesagt zunächstmal da sind, wo ich sie hingetan hab, und da bleiben - die ganze Zeit.
    Bei viielen Einheiten wirkt sich das aus - TabControl-Ucls laden initial langsamer, der Wechsel der Tabs ist aber schneller.
    Man könnte auch für Ucls Infrastruktur schaffen, wo die Ucls on Demand erstellt und disposed werden - so wie die Tragl-Mdi-Childs.
    Dann käme das TabControl weg, und man würde einen WinForms-ContentPresenter erfinden, wie er inne Wpf üblich ist - (ach potzblitz! - das habich ja schon irgendwo!)



    VaporiZed schrieb:

    Kannst machen, wie Du willst. Aber ein Form ist nun mal … ein Formular. Wie eines in ner Behörde: Eine Ansammlung von Controls, um bestimmte Daten einzugeben und diese dann simpel oder komplex weiterzuverarbeiten. Ein UC ist eher dafür gedacht, dass man bestimmte Dinge, die ein einzelnes Control nicht allein hinbekommt, zusammenfasst und dieses mit mindestens 2 Instanzen (ggf. können diese 2 Instanzen auch in unterschiedlichen Programmen zum Einsatz kommen) nutzt. Ein UC mit nur einer Instanz geht m.E. am Sinn des Erfinders vorbei.
    Seh ich nicht so.
    Ein Ucl ist exakt 100% genau so ein (Behörden-)Formular, wie ein Form son Formular ist - nur eben ohne den unerwünschten Window-Kram (open, close, move, resize, maximize, minimize).
    Die allermeisten Forms werden ja auch immer nur in einer Instanz genutzt.



    Jo, aber mit Vaporized haben wir nun eine dritte Gui-Strukturierungs-Variante: die SubForms.
    Das sind eiglich auch so Tragl-Forms, nur eben nicht als MdiChild, sondern die fahren richtig - wie Forms numal gedacht sind - auffm Bildschirm herum.
    Ich benutze sowas nur als Dialog, also modal angezeigt, sodass der User gezwungen ist, erforderliche Eingaben zu tätigen oder zu canceln.
    Man kann SubForms auch unmodal anzeigen, aber das gefällt mir garnet, von einem Programm mehrere Forms rumfahren zu haben, die womöglich noch verdeckt sind oder anderes verdecken.

    Aber für Settings, oder auch Stammdaten kann ich mir modale SubForms auch gut vorstellen. Nur ich arbeite meist mit maximierten Fenstern - das finde ich bei einem Dialog nicht so schick, wenn der das Haupt-Fenster verdeckt.
    Aber für Touch-Screen und dicke Finger vielleicht grad richtig.

    nochmal zusammengefasst

    tragl schrieb:

    Hast ja nu 4 Berater, und folglich 4 Varianten:

    - Smurf: deine eigene
    - Edr: UCL
    - Tragl: Forms (mit Mdi)
    - Vaporized: Forms (ohne Mdi)
    Wobei "deine eigene" (also alles ins MainForm stopfen) sich wohl dem Ende nähert. Nämlich wenn der Lieferanten-Tab und der Verkauf-Tab implementiert wird, ist Übersichtlichkeit glaub nicht mehr zu gewährleisten.



    achja - Regions als Strukturierung:
    Ich mag die nicht.
    Zugeklappt sehe ich nicht, was gecodet ist, aufgeklappt ist mir der Editor zu voll.
    In meinen Augen verschleiern Regions v.a. schlechte Architektur.
    Dann lieber Partiale Klassen - wobei das auch nur eine Verschleierung ist.
    Ja, wie gesagt, dass sich meine eigene Mögliochkeit dem Ende nähert sehe ich absolut ein.
    Aber es scheint ja tatsächlich so zu sein, dass es wurscht ist, ob ich tragls MDIChild Variante verwende, oder eben die UCLs.
    Bzw. gibt es für beides Gründe das nicht zu verwenden (weils für was anderes gedacht ist, usw.), ebenso gibt es ja aber auch für beides Gründe es zu verwenden. Also kommt es wohl darauf an, wen ich Frage, bzw. was diese Person dann BEVORZUGT.
    Letztlich erfüllt ja aber hier beides seinen Zweck, nämlich die Trennung des Codes.
    Also werde ich das Projekt nun auf tragls MDIChild Idee umbauen.
    Hier finde ich @tragls Infrastruktur sehr interessant. Ich glaube mein Lernpotential ist hier höher.
    Aus der Diskussion, was wofür gedacht ist, halte ich mich raus.
    Wichtig ist für mich, dass es (gescheid) umsetzbar ist - und das ist ja nunmal beides.

    ErfinderDesRades schrieb:

    Auch ists damit viel einfacher umzusetzen - eben ohne zusätzliche Infrastruktur.

    deswegen finde ich @tragl Variante interessanter. Kann ich mehr lernen und es macht Sinn damit mal gearbeitet zu haben, bevor ich es in andere Projekte integriere. Ein UC kann ich ja problemlos mit meinem jetzigen Wissen erstellen.
    So. @tragl ich bin nun dabei deine Lösung in mein Projekt einzubauen.
    Dazu habe ich zunächst ein neues Modul hinzugefügt (LocalHelpers.vb) und den entsprechenden Code dort eingefügt.
    Aber ich erhalte nur Fehler. Da das in diesem Modul 46 sind, nehme ich mal an es ist offensichtlich, was ich falsch gemacht habe?
    Bitte verzeih. Ich kann ja nicht ahnen, dass deine Glaskugel kacke ist :o)

    Ich habe in meinem bestehenden Projekt eine neue Form frmMain integriert. Mit den entsprechenden Einstellungen, damit sie als MDIParent taugt.
    Danach habe ich ein Modul eingefügt. Dieses heißt LocalHelpers.vb.
    Das Modul hat den gleichen Inhalt wie in deinem Projekt (hab reinkopiert):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Namespace App
    3. Public Module App
    4. Public Icon As Icon = My.Resources.Icon_16x16
    5. Public _tabControl As TabControl
    6. Public _mdiParent As Form
    7. End Module
    8. End Namespace
    9. Public Module TabbedMdi
    10. ''' <summary> Anzeigen einer ChildForm - Optional mit ControlStyling und Registrierung des DataSets, sowie verstecken des TreeView nach Öffnen der Form und App-Icon</summary>
    11. <Extension>
    12. Public Sub ShowMdiChild(Child As Form)
    13. RegisterMdiHandle() ' Registrierung der Handle-Methoden
    14. With Child
    15. If .MdiParent Is App._mdiParent Then
    16. .Select()
    17. Else
    18. With App._tabControl
    19. .SizeMode = TabSizeMode.Fixed
    20. .ItemSize = New Size(0, 1)
    21. End With
    22. App._mdiParent.SuspendLayout()
    23. Dts.Register(.Self, False) ' Optional nur mit den Helpers von ErfinderDesRades: Registriert das DataSet auf der Form
    24. ControlStyling.StyleControls(.Self)
    25. .WindowState = FormWindowState.Maximized ' Je nach Anwendungsfall entweder alle Childs maximiert öffnen, oder nur das 1.
    26. #If False Then
    27. If _mdiParent.MdiChildren.Count = 0 Then .WindowState = FormWindowState.Maximized
    28. #End If
    29. '.Icon = App.Icon
    30. .ShowIcon = False
    31. .ControlBox = False
    32. .MdiParent = App._mdiParent
    33. .MinimizeBox = False 'Minimize-Boxen auf Child-Forms finde ich unnötig
    34. .KeyPreview = True
    35. .Show()
    36. 'idiotischerweise muss der ChildForm-Menustrip, dessen Items einerseits automatisch in den Parent-Menustrip
    37. ' eingemerged werden, andererseits explizit versteckt werden - sonst verbleibt ein leerer Menustrip auffm ChildForm
    38. Child.Controls.OfType(Of MenuStrip)().SingleOrDefault()?.Hide()
    39. App._mdiParent.ResumeLayout()
    40. End If
    41. End With
    42. End Sub
    43. ' Public Sub ShowMdiChild(Child As Form)
    44. ' RegisterMdiHandle() ' Registrierung der Handle-Methoden
    45. ' With Child
    46. ' If .MdiParent Is App._mdiParent Then
    47. ' .Select()
    48. ' Else
    49. ' App._mdiParent.SuspendLayout()
    50. ' Dts.Register(.Self, False) ' Optional nur mit den Helpers von ErfinderDesRades: Registriert das DataSet auf der Form
    51. ' ControlStyling.StyleControls(.Self)
    52. ' .WindowState = FormWindowState.Maximized ' Je nach Anwendungsfall entweder alle Childs maximiert öffnen, oder nur das 1.
    53. '#If False Then
    54. ' If _mdiParent.MdiChildren.Count = 0 Then .WindowState = FormWindowState.Maximized
    55. '#End If
    56. ' .Icon = App.Icon
    57. ' .MdiParent = App._mdiParent
    58. ' .MinimizeBox = False 'Minimize-Boxen auf Child-Forms finde ich unnötig
    59. ' .KeyPreview = True
    60. ' .Show()
    61. ' 'idiotischerweise muss der ChildForm-Menustrip, dessen Items einerseits automatisch in den Parent-Menustrip
    62. ' ' eingemerged werden, andererseits explizit versteckt werden - sonst verbleibt ein leerer Menustrip auffm ChildForm
    63. ' Child.Controls.OfType(Of MenuStrip)().SingleOrDefault()?.Hide()
    64. ' App._mdiParent.ResumeLayout()
    65. ' End If
    66. ' End With
    67. ' End Sub
    68. ''' <summary> Registriert die Handle-Methoden für die Steuerung der Child-Forms </summary>
    69. Private Sub RegisterMdiHandle()
    70. RemoveHandler App._mdiParent.MdiChildActivate, AddressOf MdiChildOpen
    71. RemoveHandler App._tabControl.SelectedIndexChanged, AddressOf Tab_SelectedIndexChanged
    72. AddHandler App._mdiParent.MdiChildActivate, AddressOf MdiChildOpen
    73. AddHandler App._tabControl.SelectedIndexChanged, AddressOf Tab_SelectedIndexChanged
    74. End Sub
    75. ''' <summary> Stellt beim Schließen des Childs sicher, dass die entsprechende TabPage entfernt wird </summary>
    76. Private Sub MdiChildClose(sender As Object, e As FormClosedEventArgs)
    77. DirectCast(DirectCast(sender, Form).Tag, TabPage).Dispose()
    78. End Sub
    79. ''' <summary> Prüft, ob das Child bereits existiert, falls nicht wird eine neue TabPage erstellt </summary>
    80. Private Sub MdiChildOpen(sender As Object, e As EventArgs)
    81. If App._mdiParent.ActiveMdiChild Is Nothing Then
    82. App._tabControl.Visible = False
    83. Else
    84. Dim tp = DirectCast(App._mdiParent.ActiveMdiChild.Tag, TabPage)
    85. If tp Is Nothing Then
    86. tp = New TabPage(App._mdiParent.ActiveMdiChild.Text)
    87. tp.Tag = App._mdiParent.ActiveMdiChild
    88. App._mdiParent.ActiveMdiChild.Tag = tp
    89. App._tabControl.TabPages.Add(tp)
    90. AddHandler App._mdiParent.ActiveMdiChild.FormClosed, AddressOf MdiChildClose
    91. If Not App._tabControl.Visible Then App._tabControl.Visible = True
    92. End If
    93. App._tabControl.SelectedTab = tp
    94. End If
    95. End Sub
    96. ''' <summary> Ruft beim wechseln der TabPage das entsprechende Child auf und zeigt es an</summary>
    97. Private Sub Tab_SelectedIndexChanged(sender As Object, e As EventArgs)
    98. Dts.SaveDts() 'vor dem Wechsel der ChildForms DataSet speichern, damit nix verloren geht
    99. DirectCast(App._tabControl.SelectedTab?.Tag, Form)?.Select()
    100. End Sub
    101. End Module
    102. Public Module LocalHelper
    103. ''' <summary>sendet TAB</summary>
    104. Public Sub sendTab()
    105. SendKeys.SendWait("{TAB}")
    106. End Sub
    107. End Module
    108. Public Module MessageBoxes
    109. ''' <summary>zeigt eine Messagebox, wenn die gefilterte Bindingsource keine Elemente enthält</summary>
    110. <Extension>
    111. Public Sub msgDGVnoEntry(bs As BindingSource)
    112. If bs.Count = 0 Then msgInformation("keine Einträge")
    113. End Sub
    114. Public Sub msgDeleteDenied()
    115. msgInformation("Löschen nicht möglich, bitte auf inaktiv umstellen")
    116. End Sub
    117. Public Function msgOkCancel(Nachricht As String, Titel As String) As DialogResult
    118. Return MessageBox.Show(Nachricht, Titel, MessageBoxButtons.OKCancel, MessageBoxIcon.Information, Nothing) ', MessageBoxOptions.ServiceNotification)
    119. End Function
    120. Public Sub msgInformation(Nachricht As String)
    121. MessageBox.Show(Nachricht, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information, Nothing) ', MessageBoxOptions.ServiceNotification)
    122. End Sub
    123. Public Sub Msg(ParamArray items As Object())
    124. MessageBox.Show(String.Concat(items))
    125. End Sub
    126. Public Sub msgEx(ex As Exception, Optional customInfo As String = Nothing)
    127. If customInfo Is Nothing Then
    128. MessageBox.Show(ex.Message, "Ausnahmefehler", MessageBoxButtons.OK, MessageBoxIcon.Error, Nothing) ', MessageBoxOptions.ServiceNotification)
    129. Else
    130. MessageBox.Show($"{ex.Message}{Environment.NewLine}{customInfo}", "Ausnahmefehler", MessageBoxButtons.OK, MessageBoxIcon.Error, Nothing) ', MessageBoxOptions.ServiceNotification)
    131. End If
    132. End Sub
    133. Public Sub msgExclamation(Nachricht As String)
    134. MessageBox.Show(Nachricht, "Wichtige Info", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, Nothing) ', MessageBoxOptions.ServiceNotification)
    135. End Sub
    136. Public Sub msgError(Nachricht As String)
    137. MessageBox.Show(Nachricht, "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error, Nothing) ', MessageBoxOptions.ServiceNotification)
    138. End Sub
    139. Public Function msgQuestionWarning(Nachricht As String) As DialogResult
    140. Return MessageBox.Show(Nachricht, "Warnung", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, Nothing) ', MessageBoxOptions.ServiceNotification)
    141. End Function
    142. Public Function msgQuestionInfo(Nachricht As String) As DialogResult
    143. Return MessageBox.Show(Nachricht, "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question, Nothing) ', MessageBoxOptions.ServiceNotification)
    144. End Function
    145. End Module


    Die Fehlerliste ist lang. Z.B.
    Fehler BC30451 "Dts" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 29 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 136 Aktiv
    Fehler BC30451 "FormWindowState" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb
    Fehler BC30002 Der Typ "Icon" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 6 Aktiv


    Hier die gesamte Liste:
    Spoiler anzeigen
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30451 "FormWindowState" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 31 Aktiv
    Fehler BC30451 "Dts" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 29 Aktiv
    Fehler BC30451 "Dts" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 108 Aktiv
    Fehler BC30456 "Icon_16x16" ist kein Member von "Angelmarken.My.Resources". Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 6 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 136 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 139 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 143 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 148 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 150 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 155 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 159 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 163 Aktiv
    Fehler BC30451 "MessageBox" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 167 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 136 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 139 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 148 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 150 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 155 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 159 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 163 Aktiv
    Fehler BC30451 "MessageBoxButtons" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 167 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 136 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 139 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 148 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 150 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 155 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 159 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 163 Aktiv
    Fehler BC30451 "MessageBoxIcon" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 167 Aktiv
    Fehler BC30451 "SendKeys" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 118 Aktiv
    Fehler BC30451 "TabSizeMode" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 25 Aktiv
    Fehler BC30002 Der Typ "BindingSource" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 127 Aktiv
    Fehler BC30002 Der Typ "DialogResult" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 135 Aktiv
    Fehler BC30002 Der Typ "DialogResult" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 162 Aktiv
    Fehler BC30002 Der Typ "DialogResult" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 166 Aktiv
    Fehler BC30002 Der Typ "Form" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 8 Aktiv
    Fehler BC30002 Der Typ "Form" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 18 Aktiv
    Fehler BC30002 Der Typ "Form" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 85 Aktiv
    Fehler BC30002 Der Typ "Form" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 109 Aktiv
    Fehler BC30002 Der Typ "FormClosedEventArgs" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 84 Aktiv
    Fehler BC30002 Der Typ "Icon" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 6 Aktiv
    Fehler BC30002 Der Typ "Size" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 26 Aktiv
    Fehler BC30002 Der Typ "TabControl" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 7 Aktiv
    Fehler BC30002 Der Typ "TabPage" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 85 Aktiv
    Fehler BC30002 Der Typ "TabPage" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 93 Aktiv
    Fehler BC30002 Der Typ "TabPage" ist nicht definiert. Angelmarken C:\Users\flori\Documents\VB Programme\Angelmarken\Angelmarken\LocalHelpers.vb 95 Aktiv


    Hab die Solution rangehängt, falls du dir keinen Reim draus machen kannst.
    Dateien
    • Angelmarken03.zip

      (326,79 kB, 19 mal heruntergeladen, zuletzt: )

    DerSmurf schrieb:

    Die Fehlerliste ist lang.

    Imports System.Windows.Forms, Angelmarken.dtsAngelmarken, System.Drawing und schon gibt's nur noch die folgenden Fehler:

    Fehler BC30456 "SaveDts" ist kein Member von "dtsAngelmarken". Angelmarken \\TRAGL-NAS\Storage\VB.NET\Netzbeispiele\Angelmarken03\Angelmarken\Angelmarken\LocalHelpers.vb 108 Aktiv
    Fehler BC30456 "Icon_16x16" ist kein Member von "Angelmarken.My.Resources". Angelmarken \\TRAGL-NAS\Storage\VB.NET\Netzbeispiele\Angelmarken03\Angelmarken\Angelmarken\LocalHelpers.vb 6 Aktiv

    SaveDts ist ne Methode aus meinem Modul, Icon_16x16 ist nicht in deinen My.Resources.
    Dann sollte das laufen.

    Da du ja fast überall mit deinem DataSet arbeiten wirst, würde ich dir einen GeneralImport dessen empfehlen:
    und VB6 solltest du rausschmeißen...
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    weil du keinen generalimport dafür hast.
    Da ich eine Windows-Forms Anwendung bei mir Progge, hab ich z.B. System.Windows.Forms als Generalimport drin - das DataSet sowieso.
    System.Drawing brauchst du nicht überall, das kann man dann pro Modul oder Klasse lösen
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: