Arbeiten mit mehreren Projekten in einer Projektmappe

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Pulli90.

    Arbeiten mit mehreren Projekten in einer Projektmappe

    Hallo Zusammen,

    ich hoffe ich poste das an der richtigen Stelle. Im Forum und auf Google habe ich bisher keine Lösung für mein Problem finden können, was auch daran liegt, dass ich es nicht in 2-3 Wörtern zusammenfassen kann.

    Ich habe mir eine Projektmappe erstellt. In dieser Projektmappe befinden sich nun 3 Projekte. 1. "Startbildschirm";2. "Berechnungen1"; 3. "Berechnugen2"
    Jedes Projekt enthält eine WindowsForm. Mit der WindowsForm vom Startbildschirm möchte ich nun Die WindowsFormen für "Berechnugnen1" und "Berechnungen2" öffnen. Hierfür habe ich die Referenzen in "Startbildschirm" gesetzt. Mit einem Button und "Berechnungen1.WindowsForm.show()" gelingt es auch alles anzuzeigen. Anschliessend führe ich Berechnungen aus und gebe diese in TextBoxen aus. Der Code führt die Rechnungen aus, habe das mit Sprungmarken und Debug.writeLine() Anzeigen lassen. Der Code führt auch solche Codezeilen aus: TextBox.Text = Ergebnis . Allerdings wird in der Textbox nichts angezeigt.
    Dies ist nicht der Fall wenn ich die WindowsFormen "Berechnugen1" un "Berechnugen2" einzeln starten lasse also direkt debugge. Das seltsame daran ist das die Ausgabe wiederum funktioniert wenn ich den Code direkt in meinem Form.Designer vornehme. Das will ich aber nicht machen, da ich meinen Code in verschiedenen Modulen habe um ihn übersichtlicher zu halten. Alles auf eine Seite zu klatschen würde mehr arbeit machen als alles neu zu schreiben.

    Kann es sein dass ich die WindowsFormen noch irgendwie wissen lassen muss, dass sie so ausgeführt werden, als wenn ich sie einzeln debuggen würde.

    Ich hab jetzt ein bisschen geschrieben um mein Problem verständlich zu machen, wie gesagt fällt es mir etwas schwer das Problem ganz genau zu identifizieren.

    danke schonmal

    Gruss Pulli
    Das hört sich ganz so an als wenn sie nicht richtig instanziiert werden.
    Vielleicht hilft dir das weiter
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Ja ich denke das geht in die richtige Richtung.

    Ich schreib hier mal auf wie nacheinander die Aufrufe sind

    Code funktioniert:
    Klasse("Berechnungen1")-->Modul(Rechnungxy+Ausgabe in TextBox)

    Code funktioniert nicht:

    Projekt1(Klasse("Startbildschirm"))-->Projekt2((Klasse("Berechnungen1")-->Modul(Rechnungxy+Ausgabe in TextBox))

    Kann es sein, dass ich im Projekt1 noch iwie sagen muss dass in Projekt 2 das Modul mit Rechnungen existiert?
    @Pulli90 VB6 :?:
    [Allgemein] VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    Pass ggf. den Titel dieses Deines Threads an, dann kann Dir entsprechend geholfen werden.
    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!
    Wenn ich das Problem genauer identifizieren könnte, würde ich den Titel gerne anpassen. Da mein Code aus "Berechne1" aber deshalb nicht funktioniert, weil ich ihn über das Projekt "Startbildschirm" aufrufe scheint es mir an der Kommunikation dieser Projekte zu liegen.

    Was die Programiersprache angeht, habe ich mir visual studio 2017 runtergeladen du mit Visual Basic begonnen.

    Pulli90 schrieb:

    Was die Programiersprache angeht
    AHa, also VB.NET. Ändere bitte den Titel dieses Deines Threads entsprechend.
    Zunächst mal müssen alle Projekte einer Projektmappe synchron für eine CPU eingerichtet sein: x86, x64, AnyCPU.
    Wenn Du diese Einstellung im Studio änderst, sollten alle Projekte mitgehen.
    Ist ein Projekt von anderen Projekten der Projektmappe abhängig, so musst Du ersterem einen Verweis auf das zweite hinzufügen. Hier allerdings nicht auf die Exe oder DLL, sondern auf das Projekt selbst!
    Das stellt sicher, dass Debug / Release synchron behandelt wird und dass Du in das abhängige Projekt hinein-debuggen kannst.
    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 hab hier mal den Projekt-Explorer und dazu die Verweise dich ich gesetzt habe. Aber es funktioniert einfach nicht das die TextBoxen irgendwas ausgeben, wenn ich das Projekt über einen Button des Stardbildschirms aufrufe. Wenn ich es einzeln debugge klappt alles wunderbar
    Dateien
    • Projektmappe.pptx

      (1,01 MB, 168 mal heruntergeladen, zuletzt: )
    Kann es irgendwie passieren, dass sich die Steuerelemente nicht ansteuern lasse? ich kann nämlich weder einen Text ausgeben lassen noch visible auf false setzen. Das gilt für meine TextBoxen genauso wie für alle buttons. Seltsamerweise scheint es nur diese eine WindowsApplicationForm zu betreffen. Alle anderen lassen sich problemlos anstueern
    @Pulli90 Statt der pptx kannst Du auch Bilder direkt hochladen.
    Poste mal die bereinigte Projektmapper (keine bin- und obj-Verzeichnisse) als ZIP.
    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!
    Also vom Design her würde ich genau ein Projekt anlegen und dort alle Formulare und sonstige Bestandteile drin unterbringen.
    Insbesondere dann wenn die anderen Projekte Formulare enthalten, die vom Hauptprojekt aus geöffnet werden sollen.
    Ein Projekt kann nämlich beliebig viele Formulare aufnehmen; man muss die nicht einzeln in separate Projekte auslagern.
    Also wenn du keinen zwingenden Grund hast, mehrere eigenständige VB-Projekte anzulegen, dann pack den Kram in das Hauptprojekt rein.
    Wenn das dann läuft, dann kannst du dir später immer noch Gedanken über eine Verteilung von Programmelementen machen.
    Ich werfe hier mal das Stichwort "Klassenbibliothek" in den Raum.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Danke, für die Hinweise. Bin auf jeden Fall auf den "Klassenbibliotheken" auf dem richtigen Weg. Ich habe sehr viele Module verwendet um meinen Code übersichtlich zu halten. Aber anscheinend gibt es da Zugriffspobleme mit denen ich nicht gerechnet habe. Ändere ich die Module in eine partial class funktioniert das ganze. Das wird auf jeden Fall eine Menge zum umschreiben

    Pulli90 schrieb:

    Ändere ich die Module in eine partial class funktioniert das ganze.
    Das ist, denke ich mal, der falsche Weg.
    Mach Dir separate Klassen!
    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!

    Pulli90 schrieb:

    Wenn ich für alles eine Klasse mache
    Genau das macht Partial Class.
    Poste mal das bereinigte Projekt (ohne bin- und obj-Ordner).
    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!

    Pulli90 schrieb:

    Ich habe mir eine Projektmappe erstellt. In dieser Projektmappe befinden sich nun 3 Projekte. 1. "Startbildschirm";2. "Berechnungen1"; 3. "Berechnugen2"
    Jedes Projekt enthält eine WindowsForm. Mit der WindowsForm vom Startbildschirm möchte ich nun Die WindowsFormen für "Berechnugnen1" und "Berechnungen2" öffnen.
    Das halte ich für eine höchst fragwürdige Architektur.
    Normalerweise - wenn man schon mit mehreren Projekten herumhühnert - packt man alle Gui-Sachen (zB Forms, aber auch Usercontrols etc) in ein Projekt.

    Scheint mir nicht sehr sinnvoll, hier jetzt eine Lösung zu suchen, um eine verquere Architektur doch noch quasi "mit Gewalt" durchzusetzen.

    Frage: Ist deine Anwendung überhaupt so komplex, dass du mehrere Projekte benötigst?

    Ansonsten dringende Empfehlung: Wenn etwas einfach zu lösen geht, unbedingt es einfach lösen!
    Unnötige Umständlichkeit ist ganz schlechter ProgrammierStil!
    Ok danke an alle die so lange durchgehalten haben. Ich hab jetzt sämtliche Unterlagen in ein Projekt verschoben. Jetzt funktionieren alle aufrufe.
    Grund für die seltsame Architektur war schlicht, dass ich 2 Projekte bekam und die am liebsten unter einen Hut gebracht hätte. Leider hatte ich keine Ahnung wie genau ich das machen soll, da ich, wie man merkt, keine Ahnung von den Begriffen Projektmappen, Projekten, Klassen, Modulen, usw. habe und das in eine gewisse Hierarchie bringen wollte.

    Aber jetzt läufts.

    Danke