Will von form3 das ergebnis nach form 2 senden

  • VB.NET

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von frifri.

    frifri schrieb:

    nach ende der Sub/Funktion
    Wo wäre die betreffende Codezeile?
    Genau dafür gibt es Using-Blöcke, da kannst Du nicht vergessen, diese Variablen aufzuräumen, das macht das Framework für Dich.
    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 hatte jetzt nur einen kleinen Ausschnitt gepostet aber ich stelle hier gerne auch mal die gesmmte Sub ein.
    aber müssten nicht in jedem Falle, ausser ich bin in der Private Sub Form1_Load, beim Verlassen der Sub, die Variablen und Ähnliches gelöscht und der Speicher wieder freigeben werden?
    Interessiert mich jetzt. Dann würde ich in Zukunft einen Using Block verwenden, ausser wenn das nicht nötig ist. Wäre ja dann doppelt gemoppelt.

    VB.NET-Quellcode

    1. Private Sub BtnKontoDatenÄndern_Click(sender As Object, e As EventArgs) Handles BtnKontoDatenÄndern.Click
    2. Dim MieterNummer As Integer = CInt(LabelMieterNummer.Text)
    3. Dim Abgebrochen As Boolean = True
    4. Dim CV_IndexAlt As Integer = CSV_Index
    5. If TextBoxBankKtoNr.Text = "" Then Exit Sub
    6. Dim übergabeTextInhalt As New List(Of String)
    7. Dim ÜbergabeTextName As New List(Of String)
    8. If SPKDaten_Absender.Count > 0 Then
    9. übergabeTextInhalt.Add(SPKDaten_Betrag(CSV_Index)) 'Betrag
    10. ÜbergabeTextName.Add("Betrag")
    11. übergabeTextInhalt.Add(SPKDaten_Buchtag(CSV_Index)) ' Buchtag
    12. ÜbergabeTextName.Add("Buchtag")
    13. übergabeTextInhalt.Add(SPKDaten_Absender(CSV_Index)) ' Absender
    14. ÜbergabeTextName.Add("Absender")
    15. übergabeTextInhalt.Add(SPKDaten_Kategorie(CSV_Index)) ' Kategorie
    16. ÜbergabeTextName.Add("Kategorie")
    17. übergabeTextInhalt.Add(SPKDaten_LfrNr(CSV_Index)) ' lfr Nr
    18. ÜbergabeTextName.Add("lfr Nr")
    19. übergabeTextInhalt.Add(SPKDaten_KtoNrAbsender(CSV_Index)) ' KtoNr Absender
    20. ÜbergabeTextName.Add("KtoNr Absender")
    21. übergabeTextInhalt.Add(SPKDaten_Saldo(CSV_Index)) ' Saldo
    22. ÜbergabeTextName.Add("Saldo")
    23. übergabeTextInhalt.Add(SPKDaten_U_Kategorie(CSV_Index)) ' U_Kategorie
    24. ÜbergabeTextName.Add("U_Kategorie")
    25. übergabeTextInhalt.Add(SPKDaten_VerwZweck1(CSV_Index)) ' 1. Feld
    26. ÜbergabeTextName.Add("1. Feld")
    27. übergabeTextInhalt.Add(SPKDaten_VerwZweck2(CSV_Index)) ' 2. Feld
    28. ÜbergabeTextName.Add("2. Feld")
    29. übergabeTextInhalt.Add(SPKDaten_VerwZweck3(CSV_Index)) ' 3. Feld
    30. ÜbergabeTextName.Add("3. Feld")
    31. übergabeTextInhalt.Add(SPKDaten_VerwZweck4(CSV_Index)) ' 4. Feld
    32. ÜbergabeTextName.Add("4. Feld")
    33. übergabeTextInhalt.Add(SPKDaten_VerwZweck5(CSV_Index)) ' 5. Feld
    34. ÜbergabeTextName.Add("5. Feld")
    35. übergabeTextInhalt.Add(SPKDaten_VerwZweck6(CSV_Index)) ' 6. Feld
    36. ÜbergabeTextName.Add("6. Feld")
    37. übergabeTextInhalt.Add(SPKDaten_VerwZweck7(CSV_Index)) ' 7. Feld
    38. ÜbergabeTextName.Add("7. Feld")
    39. übergabeTextInhalt.Add(SPKDaten_IBAN(CSV_Index)) ' IBAN
    40. ÜbergabeTextName.Add("IBAN")
    41. End If
    42. Dim dlgFrmMenue As New DatensatzFenster
    43. dlgFrmMenue.[FormName] = "Form1"
    44. dlgFrmMenue.Pfad = Pfad
    45. dlgFrmMenue.FormDbPasswort = MyDbPassword
    46. dlgFrmMenue.Daten_Tabelle = "Konto"
    47. dlgFrmMenue.Abgebrochen = Abgebrochen
    48. dlgFrmMenue.IntNr = MieterNummer
    49. dlgFrmMenue.AuswahlSpalte = "Konto"
    50. dlgFrmMenue.ÜbergabeTextInhalt = übergabeTextInhalt
    51. dlgFrmMenue.ÜbergabeTextName = ÜbergabeTextName
    52. dlgFrmMenue.ShowDialog(Me)
    53. Abgebrochen = dlgFrmMenue.Abgebrochen
    54. If Abgebrochen = True Then
    55. Exit Sub
    56. End If
    57. GroupBox2_füllen(CSV_Index)
    58. Mietkonto_suchen_Kat_UKat(SPKDaten_Kategorie(CSV_Index), SPKDaten_U_Kategorie(CSV_Index))
    59. 'Oberfläche_aufbauen()
    60. 'MieterNummer_heraussuchen()
    61. TextBoxDatum.Focus()
    62. End Sub
    Kraut und Rüben. Ich will gar nicht wissen, wie der Rest aussieht (oder vielleicht doch?).
    Was disposed werden kann, sollte disposed werden. Für Deine hiesigen Variablen (außer eben dlgFrmMenue) brauchst Du zum Freigeben nix weiter, die werden alle nach Beendigung der Sub entsorgt, sofern sie nicht irgendwo anders heimlich weiterverwendet werden. Schwer zu sagen bei dem Code.

    VB.NET-Quellcode

    1. Abgebrochen = True
    -> Boolean-Vergleiche mit True sind überflüssig.
    Wozu hast Du überhaupt die Abgebrochen-Variable? Schreib doch gleich If dlgFrmMenue.Abgebrochen Then Return. Wobei sich die Frage stellt, was das Besondere an Abgebrochen ist und inwieweit sich das von einem passenden DialogResult (z.B. Cancel) unterscheidet.
    Ist Deine Datengrundlage eine CSV-Datei?

    btw: Der Thread artet mir etwas aus. ich erwäge da einen Schnitt anzusetzen und das in einen eigenen Thread auszulagern. Ich muss nur noch schauen, wo ich den am besten ansetze …
    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.
    ich mag so einfache und, für mich, übersichtliche Dinge wie Abgebrochen = True.
    So verschachtelte Ausführungen ohne Variablen zu nehmen kenne ich auch aber da wirds schnell, finde ich, unübersichtlich. Von daher verwende ich gerne mal "Örtliche" Variablen um den Code übersichtlicher und einfacher zu machen.
    Die CSV Daten hole ich aus einem anderen Programm. Ich selber nehme eine Access Datenbank zum speichern der Daten.
    Ich mach das auch nicht beruflich oder professionell. Nur für mich.

    Darum poste ich nicht so gerne einen kompletten Code hier. Man muss sich immer erklären wie schlecht man doch programmiert und dass das ja alles nix ist. Man kommt sich dann immer so dumm vor.
    Ich freue mich immer wenn sich hier jemand Zeit nimmt und einem nicht beruflichem Programmierer, etwas erklärt.

    Ein eigener Threat wäre vieleicht von Vorteil. Ist ja schon etwas vom Thema abgedriftet.

    frifri schrieb:

    Darum poste ich nicht so gerne einen kompletten Code hier. Man muss sich immer erklären wie schlecht man doch programmiert und dass das ja alles nix ist. Man kommt sich dann immer so dumm vor.
    Nun, Du hast den Code von Dir aus reingestellt und klar muss man damit rechnen, dass andere dann was dazu sagen. Wenn man nur vor sich selber programmiert und andere nicht einen kritischen Blick auf die eigenen Codeigentümlichkeiten werfen lässt, kommt man m.E. nicht so gut voran wie mit kritischen Blicken. Wenn Du es dabei belassen willst, ist das Dein Ding. Aber ich habe in meiner Anwesenheit hier im Forum gelernt, dass ich nur besser werde, wenn andere meinen Code zerlegen und mir klarmachen, wo ich was vergeige, umständlich mache, mich in die falsche Richtung begebe. Bevor ich mich eben in irgendwas verrenne. Wenn Du wüsstest, wie mein Code aussah, bevor ich hier aktiv war …
    Aber zu Deinem Code kann ich sonst wenig sagen, da ich den Rest nicht kenne. Daher ist die Anzahl meiner Verbesserungsvorschläge gering.

    frifri schrieb:

    Ich mag so einfache und, für mich, übersichtliche Dinge wie Abgebrochen = True. So verschachtelte Ausführungen ohne Variablen zu nehmen kenne ich auch aber da wirds schnell, finde ich, unübersichtlich.
    Ich glaub nicht, dass der Code was an Übersichtlichkeit durch die Zusammenfassung verloren hat. Ich find's soger aussagekräftiger If dlgFrmMenue.Abgebrochen Then Return = "Wenn Dialog abgebrochen (wurde) dann verlasse Prozedur."
    Ich selber würd ja eben so schreiben: If dlgFrmMenue.ShowDialog(Me) = DialogResult.Cancel Then Return, aber das wird (Dir) wohl zu kryptisch.
    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.
    Weil der Code sich einem Außenstehenden nicht erschließt. Und das bedeutet, dass die Chance sehr hoch ist, dass Dir das ebenfalls so geht, sobald Du ein halbes Jahr nicht mehr an den Projekt gearbeitet hast.
    • Warum steht Zeile#6 nicht in Zeile#2? Warum also Variablen deklarieren, wenn sie ggf. eh nicht verwendet werden? If Text = "" meckert auch der Compiler und macht einen Gegenvorschlag, aber das ist zweitrangig.
    • If SPKDaten_Absender.Count > 0 Then Da frag ich mich, ob es zu einem Crash kommt, wenn Count doch mal 0 ist.
    • Zu der Datenübergabe selbst lässt sich nix sagen, da das Projektkonzept und die Datenhaltung unklar ist. DataBinding würde die ganze Geschichte wahrscheinlich auf ein Minimum verkürzen, aber das ist advanced topic plus Spekulatius.
    • Wozu das SubForm den Namen des aufrufendenForms braucht, ist mir schleierhaft, aber auch da schlägt die Unkenntnis zu.
    • GroupBox2_füllen - da fragt sich der Leser: Was ist diese ominöse GroupBox2? Was ist dann GroupBox1 und gibt es noch mehr durchnummerierte? Und was beherbergt diese GroupBox2 überhaupt?
    • Der Leser fragt sich auch: Warum ist Code auskommentiert? Ist das testweise? Ist das alt? Ist das Kunst oder kann das weg?
    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.

    VaporiZed schrieb:

    Weil der Code sich einem Außenstehenden nicht erschließt. Und das bedeutet, dass die Chance sehr hoch ist, dass Dir das ebenfalls so geht, sobald Du ein halbes Jahr nicht mehr an den Projekt gearbeitet hast.

    ja passiert schon mal :)

    Warum steht Zeile#6 nicht in Zeile#2? Warum also Variablen deklarieren, wenn sie ggf. eh nicht verwendet werden? If Text = "" meckert auch der Compiler und macht einen Gegenvorschlag, aber das ist zweitrangig.

    ich hab mir angewöhnt Variablen immer als erstes zu deklarieren, damit ich nicht irgendwo im Code nach den deklarationen suchen muss.
    ja Zeile 6 könnte ich ganz nach oben setzen, dann würden erst keine Variablen erzeugt.

    If SPKDaten_Absender.Count > 0 Then Da frag ich mich, ob es zu einem Crash kommt, wenn Count doch mal 0 ist.

    Ich möchte die Daten nur einlesen wenn wenigstens ein Datensatz vorhanden ist. Wenn kein Datensatz vorhanden würde ja einlesen keinen Sinn machen.

    Zu der Datenübergabe selbst lässt sich nix sagen, da das Projektkonzept und die Datenhaltung unklar ist. DataBinding würde die ganze Geschichte wahrscheinlich auf ein Minimum verkürzen, aber das ist advanced topic plus Spekulatius.

    Ich hol mir die Daten aus einer CSV Datei. Die lese ich ein und nach dem verarbeiten brauche ich die Daten nicht mehr.

    Wozu das SubForm den Namen des aufrufendenForms braucht, ist mir schleierhaft, aber auch da schlägt die Unkenntnis zu.

    das mache ich nur für den Debugger. Da habe ich eine Übersicht woher der Aufruf kommt. Falls ich mich blöd suche und der Aufruf kam woanders her. Ist aber eigentlich überflüssig.

    GroupBox2_füllen - da fragt sich der Leser: Was ist diese ominöse GroupBox2? Was ist dann GroupBox1 und gibt es noch mehr durchnummerierte? Und was beherbergt diese GroupBox2 überhaupt?

    Da stehen die Daten eines Mieterkontos drinn. Ich rufe die Form DatensatzFenster auf, kann da Daten ändern und zum Schluss lese ich den Kompletten Datensatz nochmal aus der Datenbank ein um auch wirklich den aktualisierten Datensatz zu haben. Es gibt auch andere GroupBoxen. Ich benutze diese sehr gerne um die Übersichtlichkeit im Form1 zu behalten. Da kann man dann auch schnell mal alle Controls unsichtbar machen oder die Werte in den TextBoxen löschen für eine neue Eingabe oder auch manchmal alle Felder nur zum Anzeigen der Daten .Enabled = False

    Der Leser fragt sich auch: Warum ist Code auskommentiert? Ist das testweise? Ist das alt? Ist das Kunst oder kann das weg?

    Testweise auskommentiert.