IDE Knoten innerhalb einer Prozedur hinzufügen?

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von xpecidy.

    IDE Knoten innerhalb einer Prozedur hinzufügen?

    Hallo,

    etwas peinlich die Frage aber meine Suche hat keine Ergebnisse geliefert. Ist es möglich, innerhalb einer Prozedur Code per Knoten zu minimieren?
    Die IDE erkennt ja zusammengehörende "If's" usw.

    Vielen Dank! ^^

    MfG
    Markus
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Du kannst nur Regionen per #Region "NAME DER REGION" machen. Dies geht aber nur ausserhalb von Methoden.
    Innerhalb einer Prozedur ist das soweit ich weiß nicht möglich.

    Falls es zu unübersichtlich werden sollte lagere diesen Teil in eine eigene Methode aus.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    xpecidy schrieb:

    innerhalb einer Prozedur
    geht das nicht, aber außerhalb:

    VB.NET-Quellcode

    1. #Region "my test region"
    2. Private Sub xxx()
    3. End Sub
    4. #End Region
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo EdR,

    ich arbeite derzeit an einem Programm, um diverse Eingabefenster eines anderen Programmes zu befüllen. Dazu prüfe ich den aktiven Fensternamen (und den dazugehörigen Prozessnamen) der Eingabemaske und reagiere dann dementsprechend auf die Daten die geschickt werden. Es handelt sich also um eine "ewig lange" case-Verzweigung und ettlichen Befehlen zum Befüllen der Maske...

    Selbst wenn man den Code auslagern würde (was zweifelsfrei möglich ist), würde ich dennoch gern mit Knoten arbeiten. Sobald eine Abfrage (egal ob if, case, while etc etc) fertig steht, würde ich mir diese ausblenden (was ja nicht geht). So hätte ich/man immer nur den Code vor Augen, welcher noch nicht fertig ist.

    lg
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Da würde ich pro Zielfenster eine Klasse und pro Control im Zielfenster eine Prozedur machen.
    Das wäre dann wohl ordentlich gruppiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich persöhnlich würde das ja so lösen:

    VB.NET-Quellcode

    1. Public Sub LangeProzedur()
    2. '...
    3. Dim Fenstername As String = "asdf"
    4. Dim Prozessname As String = "asdf.exe"
    5. Zuordnen(Fenstername, Prozessname)
    6. End Sub
    7. Public Sub Zuordnen(Fenstername As String, Prozessname As String)
    8. Select Case True
    9. Case Fenstername = "asdf1" AndAlso Not Prozessname = "asdf.exe"
    10. Asdf1()
    11. Case Fenstername = "asdf" AndAlso Prozessname = "asdf.exe"
    12. Asdf()
    13. Case Else
    14. Throw New Exception("Kein zugehöriger Vorgang gefunden.")
    15. End Select
    16. End Sub
    17. Public Sub Asdf1()
    18. '...
    19. End Sub
    20. Public Sub Asdf()
    21. '...
    22. End Sub
    Hallo ihr zwei,

    danke für eure Gedankenanstöße.

    @Rod, kannst du deine Rangehensweise mit einem kleinen Beispiel darlegen?
    Für mich klingt das nämlich so, als müsste man erst einmal ziemlich viel "Schreibarbeit" leisten?
    Es handelt sich um gut 20 Fenster + je (bis zu) 20 Eingabefelder... :-/


    lg
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    @xpecidy: OK. Dann sollten wir, bevor Du losproggst, etwas über das Design reden.
    Iwie sollten Dinge, die zusammengehören und die öfters benötigt werden, zusammengefasst werden.
    Was ich jetzt so sehe:
    • Eingabefenster mit was drumherum (String-Verarbeitung, nur numerische Eingaben, Tests auf bestimmte Bereiche, ...),
    • Eine Kombination aus Fenster und Eingabefenster mit ähnlicher Intention,
    • sonstige.
    Du musst jetzt überlegen, was Du brauchst oder Du beschreibst mal Dein Problem etwas präziser.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    xpecidy schrieb:

    Hallo ihr zwei,
    Oh - darf ich nicht mehr mitspielen? ;(

    ich find Rods Ansatz nämlich oversized, also jedenfalls, wenns drauf hinausläuft, Klassen anzulegen, die dann je nur eine einzige Methode enthalten.
    nafets Sample hingegen ist prinzipiell so, wie ich mir vorstell: der Select Case tut nix anneres, als auf die Methoden zu verteilen: dassis ordentliches Design - jede Methode nur eine Aufgabe (Separation-of-Concerns).
    Und wenn die Methode dann mal über 100 Zeilen hat, ist auch nicht schlimm, denn der Code des Selects ist so trivial, dasses auch bei Überlängen noch problemlos wartbar bleibt.

    xpecidy schrieb:

    @Rod, kannst du deine Rangehensweise mit einem kleinen Beispiel darlegen?
    Also mein Vorschlag war ja, dass du das Beispiel bringst, und wir verbessern es dann.
    Weil ist imo ja nicht einzusehen, dass Rod nach einem vergleichbaren komplexen Problem sucht, oder erstmal eines aufsetzt, während dein Problem doch schon fertig ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ () aus folgendem Grund: Link verbessert

    @EdR SORRY! ;( Natürlich darfst du gerne immer "mitspielen"!!

    Wir haben hier ein großes Warenwirtschaftsprogramm, bei dem leider eine Funktion fehlt - nämlich Datensätze von der einen Tabelle (z. B. Artikelverwaltung) in eine andere Tabelle (z. B. Produktion) zu bekommen. Die Nutzer drucken sich mitunter lange Listen aus, um diese ausgedruckten Daten wieder einzugeben.

    Die Daten, die kopiert werden, speichere ich in ein DGV. Dabei speichere ich alle Daten, die ich dem kopierten Datensatz finden konnte (bis zu 20).
    Wenn jetzt der Benutzer ein Eingabefenster öffnet (nenne wir es Fenster1), prüfe ich zuerst, welche Spalten überhaupt im DGV relevant sind (manchmal nur 2, manchmal alle). Weiterhin prüfe ich, ob vielleicht leere Spalten im DGV mit Werten aus My.Settings erweitert werden müssen (z. B. der Lieferort automatisch "xyz" ist - dies läuft über eine sub). Wenn der Benutzer nun Daten einfügen will, setze ich das Eingabefenster zunächst in den Vordergrund (läuft über sub) und dann arbeite ich eine Reihe von Sendkeys ab (läuft über eine sub). Ja ich weiß, das Sendkeys mitunter nicht das optimalste ist, aber alles ist besser, als vorhandene Daten auszudrucken um diese wieder händisch einzugeben...

    Ich müsste jetzt, wie in nafets Beispiel alle Tastensenden-befehle nochmal auslagern, damit ich die Sub nicht so ewig lang mache?



    VB.NET-Quellcode

    1. '...
    2. Call Spalteneinblenden(_Fenstername)
    3. Call checklieferundempfaengerort(_Fenstername)
    4. Call EingabefensterinVordergrund(_Fenstername)
    5. select case _Fenstername
    6. case "Fenster1"
    7. TastenSenden("%u", Me.DGV_Artikel.Item("dgv_Zugangsort", Me.DGV_Artikel.CurrentRow.Index).Value.ToString, True)
    8. 'bis zu 20 Befehle
    9. '...
    10. ''' -----------------------------------------------------------------------------
    11. ''' <summary>
    12. ''' Funktion zum Tastensenden
    13. ''' </summary>
    14. ''' <param name="_Taste">Tastenkürzel z.B. Alt+a ("%a")</param>
    15. ''' <param name="_taste2">Der Wert der danach geschickt wird</param>
    16. ''' <param name="_wennleer">Optional - die Tasten werden nur gedrückt, wenn ein Wert vorhanden ist</param>
    17. ''' <param name="_Hinweisloeschen">Optional - soll zuerst der Wert gelöscht werden der in dem Feld vorhanden ist?</param>
    18. ''' -----------------------------------------------------------------------------
    19. Sub TastenSenden(ByVal _Taste As String, Optional ByVal _taste2 As String = "", Optional ByVal _wennleer As Boolean = False, Optional ByVal _Hinweisloeschen As Boolean = False)
    20. If _Hinweisloeschen Then
    21. SendKeys.SendWait(_Taste)
    22. System.Threading.Thread.Sleep(15)
    23. SendKeys.SendWait("^a")
    24. System.Threading.Thread.Sleep(15)
    25. SendKeys.SendWait("{DELETE}")
    26. System.Threading.Thread.Sleep(15)
    27. End If
    28. If _wennleer = True Then
    29. 'Nur Tasten senden, wenn es nicht leer ist
    30. If _taste2 <> "" Then
    31. SendKeys.SendWait(_Taste)
    32. System.Threading.Thread.Sleep(15)
    33. SendKeys.SendWait(_taste2)
    34. System.Threading.Thread.Sleep(15)
    35. End If
    36. Else
    37. SendKeys.SendWait(_Taste)
    38. System.Threading.Thread.Sleep(15)
    39. If _taste2 <> "" Then
    40. SendKeys.SendWait(_taste2)
    41. System.Threading.Thread.Sleep(15)
    42. End If
    43. End If
    44. End Sub
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Wenn ich das richtig verstehe, gibst Du in den Fenstern Teile der Daten Deiner Datenbank aus, in Abhängigkeit von was auch immer.
    Wäre es nicht sinnvoll, wenn Du ein leeres DGV anzeigst und in Abhängigkeit von was auch immer generierst Du Dir dynamisch ein typisiertes Dataset, das Du dann dem DGV zuweist?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Rod
    Ich denke du hast es schon richtig verstanden. Allerdings habe ich keine Datenbank, sondern nur das DGV, welches ich mit Daten befülle, die der Benutzer aus dem Warenwirtschaftssystem kopiert. Ich weiß nicht warum, aber man kann in dem Warenprogramm Datensätze kopieren (Klartext im Clipboard - mit Tabs unter Enter gedrennt) aber nicht ins Programm einfügen (sondern nur in den Editor oder sonst wohin). Es kann ja nun sein, dass ein Datensatz in 4 verschiedene Eingabefenster eingefügt werden soll, desshalb entzieht sich meinem Verständnis, was du mit typisiertem Dataset und DGV zuweisen verbessern wollen würdest? :S
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:

    xpecidy schrieb:

    verbessern wollen würdest
    Was zeigst Du in Deinen vielen Eingabefeldern an?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es sind ja nicht "meine" Eingabefelder.
    "Ich" habe nur das DGV, in welchem die Datensätze stehen die der Benutzer kopiert hat.

    Je nach Eingabefenster des Warenwirtschaftsprogrammes, brauche ich 2-20 Spalten "meines" DGV, welche dann in
    die Textfelder des fremden Eingabefensters "geschickt" werden. Die anderen, uninteressanten Spalten, blende ich aus.
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Was wird in den vielen Eingabefeldern angezeigt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!