Mitgliederverwaltung - Hilfe bei der Erstellung sauberen Codes
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 244 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.
-
-
ich hab deine Einstellungen grad nicht im Detail im Kopf - daher eher generell:
Komplexe Dinge auf einem Tab kommen bei mir in ein Ucl.
Also ein DGV mit mw. ein paar Detail-Controls, die an derselben BindingSource hängen - das kann maximal noch auf dem Tab bleiben.
Aber nur, wenn keine Logik dahinter steckt.
Oder anders: Wenn ein Tab nur eine BindingSource "beansprucht" und(!) keine weitere CodeBehind-Logik - dann lager ich nicht in ein ucl aus.
Ausnahmen werden in Massen geduldet.
Hängt auch vom Tab-Parent ab: ZB wenn der TabParent das MainForm ist - dessen CodeBehind ist meist eh schon ziemlich voll mit verschiedensten Dingen - da bin ich froh um jede Zeile, die ich auslagern kann.
Ist der TabParent ein anderes Ucl, so ist eher möglich, da ein bischen weiteren Kram zuzulassen.
Ansonsten ists ja kein Act, einen zu komplex werdenden Tab umzumodeln.
Ich folge da einem ganz ganz generellen Prinzip: Auslagern, wenn das Ding zu gross wird.
(Dieses Prinzip wenden sogar schon die Amöben an.)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Soho.
Ich habe jetzt die Änderungsvorschläge von @tragl verstanden und übernommen (mit einer Ausnahme. siehe unten). Außerdem habe ich das Projekt nun komplett mit MDI gestaltet und meinen Code hübsch getrennt.
Die Einstellungen habe ich dabei aber zusammen gelassen und in einer TabControl organisiert. Sind zwar 3 BindingSources, aber sogut wie kein Code.
Die Buttons haben keine Bildchen mehr, sondern aussagekräftige Beschriftungen. Außerdem habe ich die "Home Seite" entfernt. Ihre Aufgabe übernimmt nun ein MenuStrip.
Ich habe aber noch drei Fragen zum Code:
1. @ErfinderDesRades
Du lädst und speicherst das DataSet aus xml mit folgendem Aufruf:
Dts.DataFile("..\..\DataStuff\AngelmarkenData.xml").Register(Me, handleFormClosing:=True).Fill
Zur Laufzeit muss ja der Pfad geändert werden. Warum heißt dein Code dann nicht:
2. @tragl
Deine KeyDown Idee in der frmKunden funktioniert glaube ich nicht. Denn:' 'Mit Else werden dann die übrigen Tasteneingaben an die Suchen-Textbox übergeben
wären zu viele Tasten die abgefangen werden müssen (Strg, Alt, alle F-Tasten, ...)
Daher habe ich da wieder meinen Code reingeschmissen und deinen auskommentiert. Ich glaube dass KeyPress Event ist hier sinnvoller, denn diese Problematik ist hier nicht.
Ich bekomme es aber nicht hin, dass mein Event feuert, wenn die Seite angezeigt wird - ich muss erst, auf der Form was anklicken. HabePersonDataGridView.Focus()
versucht, bringt aber nix.
Ich halte aber ein KeyEvent der Form für sinnvoller. Ein KeyEvent des DGV würde ja z.B. nicht funktionieren, nachdem ich auf den Button "neuer Kunde" geklickt habe.
Wäre es evtl. denkbar ein KeyEvent der MainForm zu verwenden und die gedrückte Taste, sowie da gerade angezeigt MDIChild an eine Sub in der entsprechenden MDIChild Form zu übergeben?
Diese verwertet dann die Eingabe und führt entsprechende Aktionen aus?
3. Ich habe bevor ich angefangen hab, mein Projekt umzustellen die alten Forms umbenannt. Habe allen ein "OLD" vor dem Namen verpasst.
Damit meine fertige Solution nun aber läuft, musste ich den gesamten Code im Modul Program.vb auskommentieren. Hier stand:
Private Iterator Function CreateForms() As IEnumerable(Of Form)
Yield New OLDfrmAngelmarken
End Function
Denn nach der vollständigen Umstellung, habe ich alle "OLD" Forms gelöscht. In der Funktion hier bringt es aber auch nichts, die frmMain zu verwenden.
Aber mein Programm läuft ja auch ohne das Modul. Wozu ist es dann gut? -
DerSmurf schrieb:
1. @ErfinderDesRades
Du lädst und speicherst das DataSet aus xml mit folgendem Aufruf:
Dts.DataFile("..\..\DataStuff\AngelmarkenData.xml").Register(Me, handleFormClosing:=True).Fill
Zur Laufzeit muss ja der Pfad geändert werden...
Ah - du meinst vermutlich, dass die ReleaseVersion einen anderen Pfad benutzen soll!
Da nimmt man normalerweise CompilerKonstanten für, in etwa:.Debugger.IsAttached
hängen, weil auch an eine Release-Kompilierte Anwendung kann man einen Debugger anhängen.
(Aber vlt. konkret nicht wichtig - wer tut denn sowas) -
-
DerSmurf schrieb:
ich muss erst, auf der Form was anklicken.
Dann pack das in's Form-KeyDown und probier maMe.KeyPreview = True
im FormLoad oder in Sub New - normal sollte er dann immer auf die Tasten reagieren"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
DerSmurf schrieb:
Hat es einen Grund, dass du diesen Pfad dann von Hand änderst und eben nicht den Code oben verwendest?
Hast du meinen Code mal bei dir eingepastet? Schau dir das mal an, und versteh, dass da wird nix geändert wird.
Schau dir das auch mal an unter CompileOption.Release
-
ErfinderDesRades schrieb:
Verstehe nicht, was du mit "von Hand ändern" meinst.
Ich meine damit, wenn ich den Code: Dts.DataFile("..\..\DataStuff\AngelmarkenData.xml").Register(Me, handleFormClosing:=True).Fill
verwende, muss ich - bevor ich das Programm z.B. auf einen anderen PC kopiere, der das Programm dann ausführt - den Pfad ändern. Warum machst du das so, und verwendest eben nicht, den Code:
tragl schrieb:
Dann pack das in's Form-KeyDown und probier ma Me.KeyPreview = True im FormLoad
ändert leider nichts. Ich muss nach wie vor ein Control in der frmKunden anwählen.
Könnte ich auch noch eine Antwort auf meine 3. Frage bekommen? Wofür ist das Modul Prgram.vb? Und warum funktioniert mein Programm wie vorher, wenn ich den kompletten Code hierin auskommentiere?
Spoiler anzeigen 3. Ich habe bevor ich angefangen hab, mein Projekt umzustellen die alten Forms umbenannt. Habe allen ein "OLD" vor dem Namen verpasst.Damit meine fertige Solution nun aber läuft, musste ich den gesamten Code im Modul Program.vb auskommentieren. Hier stand:Private Iterator Function CreateForms() As IEnumerable(Of Form)Yield New OLDfrmAngelmarkenEnd FunctionDenn nach der vollständigen Umstellung, habe ich alle "OLD" Forms gelöscht. In der Funktion hier bringt es aber auch nichts, die frmMain zu verwenden.Aber mein Programm läuft ja auch ohne das Modul. Wozu ist es dann gut?
Außerdem habe ich noch eine Frage: Warum muss ich mit der MDI Geschichte hier die Forms vorher nicht initialisieren?
Statt
nehme ich einfachfrmKunden.ShowMdiChild
-
DerSmurf schrieb:
Warum muss ich mit der MDI Geschichte hier die Forms vorher nicht initialisieren?
Klar, Du kannst nicht mitUsing
arbeiten, da das nur mitShowDialog
sinnvoll klappt, weil mitShow
die Forminstanz nach wenigen Mikrosekunden wieder plattgemacht wird. Dementsprechend musst Du langlebige Variablen nutzen.
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. -
DerSmurf schrieb:
ErfinderDesRades schrieb:
Verstehe nicht, was du mit "von Hand ändern" meinst.
Ich meine damit, wenn ich den Code: Dts.DataFile("..\..\DataStuff\AngelmarkenData.xml").Register(Me, handleFormClosing:=True).Fill
verwende, muss ich - bevor ich das Programm z.B. auf einen anderen PC kopiere, der das Programm dann ausführt - den Pfad ändern. Warum machst du das so, und verwendest eben nicht, den Code:
Ich verwende den Code doch - der ist doch von mir. -
Das bedeutet ich sollte (muss) aus
frmVerkauf.ShowMdiChild
,
machen.
@ErfinderDesRades
Ah sorry. In deinem DataSetTemplate taucht das #If Deubg nicht auf. Ich dachte daherdu nutzt es aus irgendeinem Grund nicht. Hab nicht gepeilt, dass du es doch verwendest, es nur im Template nicht enthalten ist. -
Jup. Zumindest meine Empfehlung.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. -
DerSmurf schrieb:
Ah sorry. In deinem DataSetTemplate taucht das #If Deubg nicht auf. Ich dachte daherdu nutzt es aus irgendeinem Grund nicht. Hab nicht gepeilt, dass du es doch verwendest, es nur im Template nicht enthalten ist.
Das ist nur äusserst selten der Fall.
Was ich privat programmiere, sind ja immer nur Experimente, ProofOfConcepts, etc. -
Alles klar.
Dann warten wir Mal was @tragl zur Instanzierung der Forms sagt.
Von ihm ist ja schließlich der Code.
Außerdem hätte ich gerne eine Antwort auf meine Frage Nummer 3
@ErfinderDesRades ich glaube dass Modul Program.vb ist Teil deines Templates.
Was macht es? Und warum geht mein Code problemlos, wenn ich das gesamte Modul auskommentiere? -
Ich habe in den Projekteigenschaften das WinForms-AnwendungsFramework deaktiviert.
Stattdessen starten meine Proggis mit Sub Main.
siehe AnwendungsFramework deaktivieren -
@DerSmurf ich guck dabei wenn’s kühler ist. Ich hab aktuell über 30 grad im Büro - da halte ich mich so wenig wie möglich auf derzeit"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Ah. Der Code im Modul Program.vb konnte nicht ausgeführt werden, weil durch tragls Änderungen die Sub New der Mainform Private war. Deswegen nicht Aufrufbar durch die Function CreateForms().
Ich habe aber noch eine Frage hierzu:
Wenn ich jetzt den Deug Ordner auf meinen Desktop kopiere, verwendet mein Programm den sFile Pfad aus der ersten Verzweigung (..\..\DataStuff\)
Was muss ich denn tun, damit mein Programm in den Else Zweig wechselt?
Ich dachte#If DEBUG
bedeutet, wenn ich mein Programm über VS starte.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()
-
Als Release kompilieren
Stellste in Menu:\\Build\ConfigurationManager\'Active Solution Configuration' ein.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Ah. Ich musste erstmal googlen. Wusste garnicht, dass ich da was umstellen kann / muss. Jetzt hat auch der release Ordner mal einen Sinn. zimelich cool
Edit: Ich habs direkt oben im Ribbon eingestellt. (Bild unbenannt2)
Ich habe schonmal angefangen meine Verkaufsform zu designen (siehe Screenshot).Welche Art von Controls würdet ihr verwenden, um auswählbar zu machen, welche Artikel der Kunde kauft? Mir schweben Buttons vor. Aber ich glaube, diese kann ich nicht per Code designen (also nicht dynamisch dem DataSet anpassen), weil ja die Buttons unter umständen eigenen Code enthalten müssen (der eh nicht dynamisch erzeugbar wäre)Die Arikel, um die es geht habe ich auch als Screenshot angehängt. Artikel die den gleichen "BesonderheitCode" haben, gehören dabei zusammen.Es sollen aber nicht alle Artikel sichtbar sein (evtl. eine boolean Row in der DataTable?). Die beiden Artikel DAV Verzug und DAV Neuanmeldung, sollen automatisch eingefügt werden, niemals vom Benutzer direkt. -
DerSmurf schrieb:
zur Instanzierung der Forms sagt.
wird nicht instanziiert - funzt aber so, denn das Form wird einmal geöffnet und in jedem Fall wieder geschlossen. Ein doppeltes Öffnen geht damit nicht, sondern es wird ja hingewechselt falls es schon offen ist."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
-
Ähnliche Themen
-
8 Benutzer haben hier geschrieben
- DerSmurf (112)
- ErfinderDesRades (62)
- tragl (60)
- VaporiZed (6)
- Dksksm (2)
- petaod (1)
- Kasi (1)
- ISliceUrPanties (1)