Fragen & Tipps zur Architektur (C#/WinForms)

  • C#

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Parmaster.

    Fragen & Tipps zur Architektur (C#/WinForms)

    Hallo!

    Ich arbeite derzeit an einem Projekt und würde mir gern mal ein paar Tipps von Erfahrenen einholen bzw. hätte ich auch noch ein paar Fragen zur Umsetzung.

    Kurze Erläuterung um was es geht:
    ich will ein Programm erstellen was sowohl auf einem Windows Rechner läuft, als auch auf einem Raspberry Pi unter Linux. Mir ist klar das manche Sachen nicht unter Linux laufen (besonders die 3rd Party Tools), habe ich schon getestet. Dazu kommt noch das als Display ein Android Tablet dient, welches per Remote Desktop auf den RPi zugreift.

    Was ich vorhabe ist folgendes:
    ich erstelle ein Programm mit zwei Forms, eine für den RPi, die andere für den normalen Rechner. Beide Forms sind eigentlich gleich aufgebaut, nur das auf der Form für den RPi einige Sachen wegfallen, dafür andere dazu kommen, und die Grösse auch anders ist.

    Was mich jetzt interessieren würde:

    - soll ich tatsächlich zwei Forms erstellen? Wenn ja, würde es sich lohnen diese per Code zu "füllen", oder doch lieber beide im Designer machen? Oder reicht sogar eine Form, die je nach Bildschirmauflösung, dynamisch erstellt wird? Wie gesagt, es ändern sich eigentlich nur ein paar Controls, und halt die Größe der Form an sich und der Controls sind verschieden.

    Dazu hätte ich noch eine Frage, und zwar wie man das in C# macht, das ich entweder z.B. Form1 oder Form2 lade. In VB weiß ich es. Ist das in C# gleich? Ich würde ein SplashScreen machen (nicht unbedingt notwendig, sieht aber nett aus), und in der Zeit wird die Auflösung ermittelt, und dann entweder Form1 oder Form2 geladen.

    Es können übrigens niemals beide gleichzeitig an sein, das geht von der Hardware nicht.

    Freue mich auf eure Tipps und Hilfe! :thumbup:


    PS: falls jemand einen besseren Vorschlag hat, ich bin für alles offen!
    in c# startet ein Programm in der Program.cs - Klasse. Dort wird dann das Startform gestartet -siehste dann schon, wenn du mal in eine Program.cs reinguckst.

    Ob nund ein Form für beide Varianten, oder 2 Forms kann man dir nichts empfehlen. Bei hoher Übereinstimmung ist ein Form das einfachste, um doppelten Code zu vermeiden. Je größer die Unterschiede, desto unübersichtlicher wird das aber.
    Auch kann man sich vlt. was ausdenken nach dem Behavior-Prinzip, um gemeinsamen Code aus den beiden Forms in eine gemeinsame Behavior-Klasse auszulagern.
    vielleicht.

    Was für dich wichtig ist, ist das Layout-System zu kennen: Layout in Windows.Forms
    Also es wird nicht viel Unterschiede geben bei den Controls, höchstens zwei oder drei. Das muss ich aber noch mal genauer testen welche ich wie einsetze. Soweit bin ich aber noch nicht.

    Das mit dem Auslagern in eine eigene Klasse um redundanten Code zu vermeiden ist natürlich auch sinnvoll.

    Es wird wohl am besten sein wenn ich alle Varianten ausprobiere, oder? Also es steht ja im Moment zur Auswahl:
    - 2 Forms, beide im Designer (Code mit und ohne eigene Behaviour Klasse)
    - 2 Forms, beide per Code erzeugt (Code mit und ohne Behaviour Klasse)
    - 1 Form, per Code erzeugt
    Ja, die Form im Designer erzeugt und nicht erst zur Laufzeit. Ist nur noch die Sache dass die Form ja unterschiedlich groß ist, je nach Bildschirmauflösung.

    Also bei Start wird die Auflösung ermittelt, dann die Größe der Form angepasst, und die Controls eingefügt. Eigentlich bräuchte man dann doch keine eigene Behaviour Klasse mehr, oder? Kann natürlich auch sein dass ich mir darunter etwas anderes vorstelle als eigentlich gemeint ist. :)

    Parmaster schrieb:

    Ja, die Form im Designer erzeugt und nicht erst zur Laufzeit. Ist nur noch die Sache dass die Form ja unterschiedlich groß ist, je nach Bildschirmauflösung.
    Das ist keine Sache - jedenfalls nicht, wenn dir das WinForms-Layout-System bekannt ist. Dieses ermöglicht, flexible Layouts zu erstellen, die sowohl groß als auch klein sein können.
    Möglich, dass die Möglichkeiten des LayoutSystems nicht hinreichen, aber probieren würde ich's zunächst mal damit.