Spontan würde ich das ganze mit einer Job-Queue versuchen.
Die Gebäude melden der Queue, dass sie eine Ressource brauchen. Hat ein Arbeiter nichts mehr zu tun, nimmt er sich die nächste Aufgabe aus der Queue. Sind keine Ressourcen mehr für die Aufgabe da, landet diese wieder in der Queue.
Hallo herbivore,
ich habe nicht gesagt, die Init-Methode separat aufzurufen, sondern eine Methode zu schreiben und diese bei Bedarf aufzurufen, mit der man abfragen kann, ob die Initialisierung erfolgreich war. Das war es ja, was du ermitteln wolltest.
Dann bin ich (wenn wir bei der vorhanden Modellstruktur bleiben) wieder beim Ausgangsproblem. Ich kann mein Init nicht im Konstuktor der Basisklasse aufrufen, da die Controls in der abgeleiteten Form noch nicht existieren. Der nächste Schritt ist ja dann schon, die Form anzuzeigen. Statt der Prüfmethode hätte ich in der Basisform eine Property eingerichtet, die auf true gesetzt ist, wenn die Initialisierung erfolgt ist (aber das kommt ja aufs gleiche raus).
Ansonsten hast du bestätigt, was ich vermutet habe. Die Probleme mit der Initialisierung kommen nicht aus dem GUI, sondern aus dem Modell (bzw. dem DAL). Wenn du GUI und Modell trennst, kannst du die nötigen Modellobjekte erstellen und erst wenn das fehlerfrei geklappt hat das Form erzeugen
Wir haben im Grunde schon eine Trennung nach GUI und Logik. Nur werden halt die DAL bzw. die BLL Objekte aus der Form heraus referenziert und nicht aus dem Menü.
Das ist sicherlich nicht der ideale Weg, aber das zu ändern bekomme ich in unserem System nicht mehr umgesetzt 😃
Hallo herbivore,
Die Initialisierung des Menüs meine ich gar nicht. Das Menü erzeugt Instanzen der Form, die dann als MDI-Child angezeigt werden.
In dieser Initialisierungsphase kann eine Menge passieren. Es werden Daten geladen, an die Controls gebunden, Events abonniert etc. Das hängt dann auch immer vom jeweiligen Entwickler ab.
Möglich wäre es natürlich auch, dass ich die Init-Methode zwischen dem Konstruktor und Show() aufrufe und dann einfach ein bool zurückgeben. Allerdings bin ich dann auch dazu gezwungen, diese Methode immer selbst aufzurufen, was ich wiederum gerne verhindern würde. 😃
Das ganze ist jetzt natürlich ein bisschen Spielerei. Die Lösung von san-software funktioniert wunderbar und letztendlich könnte ich auch einen Parameter übergeben, ob die Form trotzdem angezeigt werden soll.
Ammer in Deiner selbstgeschriebenen Show Methode vor dem eigenlichen base.Show. Wenn die Überprüfung fehl schlägt, kannst Du das dann entsprechen behandeln, bovor es weitergeht.
Genau, das mache ich z.Zt. auch. Ich hätte die Überprüfung nur gerne in der aufrufenden (Menü)Klasse gemacht um dort die Wahl zu haben, ob ich die Form trotzdem anzeige oder nicht.
Vielen Dank für die sehr schnelle Antwort.
Manchmal liegt die Antwort so nah und man kommt nicht drauf. Funktioniert wunderbar.
Das einzige "Problem" hierbei ist, dass ich nicht vor dem Show()-Aufruf prüfen kann, ob das Init erfolgreich war.
Moin zusammen!
Ich habe folgendes Problem.
Ich habe eine Basis-Form-Klasse (Form A). Alle weiteren Forms werden von dieser Form abgeleitet.
Bisher ist es so, dass ich im Load-Event der abgeleiteten Form alle Initialisierungen (Databindings etc.) vorgenommen habe.
Nun möchte ich aber gerne noch vor dem Load-Event mitbekommen, ob alle Initialisierungen erfolgreich waren. Daher habe ich in Form A eine Methode "Init" geschaffen, die im Konstuktor von Form A aufgerufen wird.
In der abgeleiteten Form habe ich dann alle Funktion aus dem Load-Event in das neue Init-Event verschoben.
Mein Problem ist nun, dass zum Aufruf der Init-Methode noch nicht das "InitializeComponent" der abgeleiteten Form aufgerufen wurde und ich daher nicht auf die Steuerelemente zugreifen kann.
Ich habe leider keine Möglichkeit gefunden, mich dazwischenzuschalten, wenn der Konstuktur komplett erledigt ist. Habt Ihr da ne Idee zu? Danke schon mal im Voraus!
Happy Birthday 😃
Auf die nächste 10 Jahre 😃
Du könntest dir ja den Rowindex merken, wenn eine Checkbox aktiviert wird. Dann brauchst du nur diese Rows ansprechen und musst nicht alle durchgehen.
Aber der Hinweis von Herbivore hat natürlich Prio 😃
im Unternehmen haben Winforms-Anwendungen durchaus ihre Nachteile. Aktualisierung ist da so ein Thema. Der Firefox, der sich selbst aktualisiert, macht das nämlich auch nur, wenn der Benutzer die entsprechenden Berechtigungen hat. Die hat ein Endanwender in einem Unternehmen aber nicht. Also bleibt Firefox 3.5 noch viele Jahre Firefox 3.5, bis die IT sich für eine Softwareupdate-Lösung entscheidet.
Ist alles gar nicht so problematisch. Bei uns bekommt jeder Benutzer einen Launcher auf den Rechner installiert, der den "Home-Screen" startet. Der Launcher prüft beim Start, ob eine neue Version im Netzwerk liegt und tauscht dann ggfls. die Dateien aus. Läuft alles wunderbar 😃
Moin zusammen,
diese kleine Zeile kommt aus Excel.
=G6+(WENN(E7<0;E7*-1;E7*-1)+F7)
Vielen Dank.
Das Attribut [DebuggerStepThrough()] vor jeder verwendeten Klasse hat den gewünschten Effekt.
Hallo zusammen,
gibt es eine Möglichkeit, eine Klasse zu kennzeichnen, dass ich diese nicht debuggen kann?
Ich habe 2 Projekte. Projekt 2 wird in Projekt 1 als Verweis eingebunden. Ich erstelle in Projekt 1 eine Klasse aus Projekt 2 und rufe dort eine Methode auf. Ich möchte aber, dass der Inhalt der Methode nicht im debugger angezeigt wird, also dass im Grund Projekt 2 im Debugger übersprungen wird. Alle Versuche sind bisher kläglich gescheitert 😃
Danke schonmal für eure Antworten.
Versandsoftware und Intrastat Software benötigt z.B. das ISO-3 Kürzel.
Für die Intrastat-Meldungen wird das ISO-2 Kürzel benötigt 😉
Also ich finde diese Diskussion echt überflüssig. Wenn jemand sagt, er habe keine Lust, keine Zeit oder was auch immer, seine Aussage weiter zu begründen oder detallierter in ein Thema einzusteigen, dann ist das sein gutes Recht und das haben alle zu akzeptieren, ohne den jenigen zu Steinigen!
********** Sorry, falsch gelesen 😦 ************
Mal schaun was da passiert wenn ich nen Null-Value an de Textbox, etc binde
Dann bleibt die Textbox einfach leer ^^
aber... in der Entwurfsform war sie ja nicht sichtbar! ^^
Durch das Auswählen im Eigenschaftenfeld werden auch nicht sichtbare Controls in der Entwurfsansicht "mit markiert". So konnte ich bisher alle mir nicht sichtbaren Controls wieder entfernen.
als Hinweis für die Zukunft: Das "Ganze" unter eine Versionskontrolle stellen und dann mit "Rückgängig" die versehentliche Änderungen wieder verwerfen.
Somit würde man ggfls. viel zu viele Veränderungen rückgängig machen, je nachdem was man nach dem anlegen der Tabpage (in diesem Fall) noch alles angestellt hat 😃
Wenn du nach der auswahl der Tabpage im Eigenschaftenfenster noch einmal auf den Reiter der Entwurfsform klickts, dann sollte sich die Tabpage mit "entfernen" entfernen lassen 😃
Letztendlich ist es die selbe Property. Ob ich es jetzt im Designer oder im Code setze hängt von der persönlichen Vorliebe und dem Verwendungszweck ab z.B. wenn die Combobox im Designer noch gar nicht existiert.
Und mit ein wenig Erfahrung und etwas Eigeninitiative kann man aus der Zeile schließen, daß dieses Property wahrscheinlich auch im Designer gesetzt werden kann.
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
Moin,
versuch es am besten einmal mit ColumnMapping.
http://www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-server
Ich vermute das es am this.MDIParent liegt. Weil die geöffnete Form nicht im Parent ist
Jep. Du musst wie im Code angegeben den MdiParent für die Kundenform angeben. Du weist hier aber den MdiParent Wert der Nicht-Mdi-Form (this.MdiParent) zu, welcher logischerweise leer ist. Wenn du hier den richtigen Parent setzt sollte es gehen.
Derselbe Polizist kann gleichzeitig auch Punk sein, und ausserdem auch ein alter Mensch. Das führt bei dir zB. schon dazu, dass du 2 Gustavse hast, und das ist bereits der datenbänkerische GAU.
Grundsätzlich stimmt es natürlich was du sagst. Beim zitierten Punkt kommt es jedoch auf die Anforderung an. Gehe man mal davon aus, es wäre ein Spiel und Polizei steht den Punks gegenüber. Somit schließt sich aus, daß eine Person Punker und Polizist ist. Geht man dann noch davon aus, daß ein Alter Mensch kein Polizist mehr ist, und ein Baby weder Punk noch Polizist oder gar Alter Mensch ist, so haben wir wirklich nur noch eine Person in einem Knoten.
Aber es ist natürlich schon richtig, daß man die Struktur besser wie von dir angegeben aufbauen sollte.
Zu den Fragen:
Wir benutzen bei uns im Unternehmen das Gid von Janus. Das lässt sich so einstellen, daß diese Filterleiste erscheint.
Bei dem normalen Grid ist mir nicht bekannt, daß es so eine Funktion gibt.