Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
[3.5] [Grundsätzlich] Aufbau von grafischen Programmen in C#
spacer
Autor Nachricht
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star

Beiträge: 1481
Dabei seit: 11.06.2002
Wohnort: Känche

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 04.03.10 22:54 
.NET Version: 3.5
Antworten mit Zitat Beitrag melden
Hallo zusammen,
ich schreibe jetzt schon eine ganze Weile C#-Programme. Dies sind bisher immer Bibliotheken, Dienste etc.. gewesen und große GUI-Kenntnisse sind nie benötigt gewesen.

Nun bin ich über eine ziemlich banale Frage gestolpert:
Wie strukturiert man am besten ein Programm mit grafischer Oberfläche
Bei Delphi und anderen Programmiersprachen habe ich es eigentlich immer so gehandhabt:
GUI struktur
Ein Beispiel:
Die in dem GUI wird die Aktion Click ausgelöst. Nun werden die passenden Funktionen im GUIBackend aufgerufen.
Das GUIBackend schaut z.B. welches Element in einem listview selektiert wurde, ordnet dies einem bestimmten Element in einem Array zu, welcher alle zusätzlichen Informationen enthält, dass das Programm benötigt (Dateiname, Größe etc.)
und Ruft tiefere Funktionen im Backend auf.

Die Funktionen für das GUIBackend habe ich immer in eine eigene Klasse gepackt.
Bei C# kann man jedoch ohne Invoke nicht auf die Elemente eines Forms zugreifen.
Ich suche nun nach einer Möglichkeit möglichst ohne Invoke (wegen mono) eine saubere Schnittstelle zwischen GUI und Backend zu erstellen.
Oder ist es in C# gar so gedacht dass man alle GUI-Relevanten Funktionen direkt in die Ereignisse setzt?
Mir kommt das immer irgendwie unsauber vor...
Wie baut ihr eure Programme auf?
Einloggen, um Attachments anzusehen!
_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 383
Erhaltene Danke: 15
Dabei seit: 15.03.2007
Wohnort: Willich


VS2008 Pro, VS2010 Pro, Delphi 7 Pro
BeitragVerfasst: Do 04.03.10 23:11  Antworten mit Zitat Beitrag melden
Zitat:
Bei C# kann man jedoch ohne Invoke nicht auf die Elemente eines Forms zugreifen.

Das wäre nur nötig wenn du einen Crossthread Zugriff machst. Und unsynchronisierter Crossthread Zugriff sollte auch in Delphi ganz schlechter Stil sein auch wenn es Delphi nicht explizit unterbindet(oder doch?).

Aus Neugier wo ist das Problem mit Mono? Dort werden die Winforms Controls doch wohl auch ISynchronizeInvoke implementieren?

Moderiert von user profile iconChristian S.: C#- durch Quote-Tags ersetzt
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star

(Threadstarter)

Beiträge: 1481
Dabei seit: 11.06.2002
Wohnort: Känche

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 04.03.10 23:31  Antworten mit Zitat Beitrag melden
(verdammt mein text hat sich gerade in luft aufgelöst. hier die kurzform)
ich habe mich etwas unglücklich ausgerückt:

fremde klassen haben auf controls innerhalb des forms ja keinen zugriff (private). zugriff von außerhalb bekommt man nur per invoke (was man ja nicht tun sollte wenn es nicht unbedingt nötig ist).
ich habe irgendwo gelesen das mono-programme kein invoke enthalten dürfen.
und da ich vielleicht irgendwann, irgendein programm nach mono migrieren möchte will ich mir diesen weg durch sowas nicht verbauen.

möglicherweise habe ich auch einfach was falsch assoziiert /verstanden.

wie baust du solche programme auf?
alle gui relevaten aktionen direkt in ereignis implementieren oder erstellst du zusätzliche funktionen innerhalb der form-klasse ( was mir momentan als der "richtigste" weg vorkommt).

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17543
Erhaltene Danke: 105
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst: Do 04.03.10 23:43  Antworten mit Zitat Beitrag melden
user profile iconpatrick hat folgendes geschrieben Zum zitierten Posting springen:
ich habe irgendwo gelesen das mono-programme kein invoke enthalten dürfen.

Ich bin mir sicher, Du meinst PInvoke, also das einbinden von Betriebssystem-Funktionen wie der Windows-API. Das hat mit der normalen Invoke-Methode nichts zu tun.

_________________
I am of peace. Always.
Vom 9.9. bis 13.9. in Urlaub
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 383
Erhaltene Danke: 15
Dabei seit: 15.03.2007
Wohnort: Willich


VS2008 Pro, VS2010 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.03.10 00:16  Antworten mit Zitat Beitrag melden
Zitat:
fremde klassen haben auf controls innerhalb des forms ja keinen zugriff (private).


Das kommt drauf an wie man die definiert(Stichwort Modifiers Property an der Form). Aber Standard ist private und das ist auch gut so. Direkt soll man da wirklich nicht dran aber mann kann der Form ja wiederum eine saubere Schnittstelle gegeben mit Methoden/Properties/Events von dennen aus man auf die eigenen Controls zugreift. Das Problem sollte sich aber eher seltener Stellen klassischerweise Sitz der Auslöser einer Aktion in der Form (oder noch genauer vor der Form z.b du). Man wird also wenn man richtigherum gedacht hat von der Form aus auf Schichten dahinter zugreifen um sich etwas zu holen (Funktionen/Daten us.w.). Der Fall das man etwas aus einer anderen Klasse in eine Form hineinschiebt sollte der seltenere Fall sein(jaja ich weiß es gibt auch andere Anwendungen).

Zitat:
wie baust du solche programme auf?
alle gui relevaten aktionen direkt in ereignis implementieren oder erstellst du zusätzliche funktionen innerhalb der form-klasse ( was mir momentan als der "richtigste" weg vorkommt).


Üblicherweise bediene ich mich eines Patterns aus der MV... Umgebung (MVC, MVP, MVVM) oder benutze zumindest etwas das dem nahe kommt. Die ~zusätzlichen Funktionen~ würden also hauptsächlich in einer weiteren Klasse(n) stecken und nicht direkt auf der Form.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home