C# Verständnisfrage zu Programmeinstiegspunkt/Main-Methode

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
Nabend zusammen,

Ich versuche momentan eine kleine WPF-Browseranwendung zu entwickeln und habe ein paar Probleme das Programm strukturiert aufzubauen.

Ich habe eine GUI gebastelt und verschiedene Steuerelemente platziert. Wenn ich jetzt z.B. einen Doppelklick auf einen Button mache, dann öffnet sich eine Quellcodedatei (*.cs-Datei) und das Programm springt direkt zur Button.Click-Methode, genauso ist es bei allen anderen Steuerelementen, so weit so gut.

Nun frage ich mich allerdings ob ich meinen Code komplett in diese einzelnen EventHandler-Methoden schreiben muss, oder ob das nicht total dem Prinzip der OOP widerspricht.
Darüber hinaus scheint es in meinem Projekt auch keine Main-Methode zu geben. Ich weiß, dass man diese häufig selbst erstellen muss, aber dann frage ich mich wiederum was dort hinein soll, wenn alles in der Button.Click Methode steht und vorallem wo diese dann erstellt werden muss, doch nicht etwa in der Klasse wo sich die ganzen Methoden zu den Steuerelementen befinden ?


Ich hoffe, dass ich dieses Verständnisproblem einigermaßen rüberbringen könnt und ihr mir da weiterhelfen könnt!

Vielen Dank für die Hilfe!

Grüße
 
hey,
rechtsklick auf die form -> view code. dann erstellt er nicht automatisch einen event handler :). und natürlich kannst du auch ohne event handler methoden erstellen. einfach unter dem "}" eines event handlers
private void TestMethode()
{

} :).
wenn sich das programm starten lässt (vs?->f5) dann gibt es auch irgendwo eine main-methode.
einfach mal in der suche eingeben und schauen wo er dich hinbringt.
 
@maxFrisch

danke für deine Antwort, aber ich glaube du hast meine Frage etwas falsch verstanden ^^

Die event handler sind nicht das Problem, ob mit Rechtsklick oder per Doppelklick auf das Steuerelement, wie man dahin kommt weiß ich. Auch ist mir bewusst dass man dort noch viele andere Methoden erstellen kann

Mir bereitet, wie oben beschrieben, der grundsätzliche Aufbau des Programmes Probleme, wo muss z.B. die Main-Methode hin ? etc.

Grüße
 
frage:
Nun frage ich mich allerdings ob ich meinen Code komplett in diese einzelnen EventHandler-Methoden schreiben muss, oder ob das nicht total dem Prinzip der OOP widerspricht.
antwort:
und natürlich kannst du auch ohne event handler methoden erstellen. einfach unter ...

frage:
Darüber hinaus scheint es in meinem Projekt auch keine Main-Methode zu geben.
antwort
wenn sich das programm starten lässt (vs?->f5) dann gibt es auch irgendwo eine main-methode.
einfach mal in der suche eingeben und schauen wo er dich hinbringt

danke für deine Antwort, aber ich glaube du hast meine Frage etwas falsch verstanden ^^
hä? also mir kommen die antworten eigentlich schon richtig vor^^.
ansonsten bitte nochmal umformulieren.
 
Also, du hast denke ich mal eine From1.cs, da programmierst du grade rum. Diese Form1.cs wird aber selbst bei Programmstart ausgeführt, in der program.cs steht eine Main die auch wirklich als erstes aufgerufen wird.

Die eventhandler in deinem Fall sind ja nur zuständig für Interaktionen mit der Oberfläche. OOP kannst du deswegen doch, erstelle eine Klasse und mache da deine Funktionen, erstelle sie bei Form.load und beim Knopfdruck führst du die .run deiner Klasse auf.Zum Beispiel.

Wenn du noch fragen hast, her damit.

mfg
 
Eine Main-Methode in der Form gibt es nicht, das läuft jetzt auch über Event-Handler, z.B. dem Load-Event des Fensters. Es sollte aber auch eine Applikations-Klasse geben die ein Start-Event hat, das entspricht wohl am ehesten dem was du suchst.
 
zunächst nochmals danke für Eure Hilfe!

Jesterfox schrieb:
Eine Main-Methode in der Form gibt es nicht, das läuft jetzt auch über Event-Handler, z.B. dem Load-Event des Fensters. Es sollte aber auch eine Applikations-Klasse geben die ein Start-Event hat, das entspricht wohl am ehesten dem was du suchst.
Aha, jetzt habe ich es glaube ich verstanden ^^

Es gibt also 2 "partial-classes" (Page.cs und App.cs) in dem Projekt. In der Page.cs sind die ganzen event-Methoden hinterlegt in der App.cs muss dann dieses Load.-event hinein nehme ich an.
 
Offensichtlich lernt der moderne Mensch das Schreiben, aber leider nicht das Lesen.
estre hat so ziemlich im ersten Satz geschrieben, dass er WPF nutzt. Wieso nun jeder mit Forms um die Ecke kommt ist mir etwas unverständlich.

@estre
Was du suchst, findest du in der App.xaml.cs. Wenn du die jetzt öffnest, siehst du bis auf eine leere Klasse erstmal gar nichts (es sei denn, du hast selber schon Code hinzugefügt).

Die Main-Methode, die du suchst, gibt es in der Form nicht. Interessant wäre für dich wahrscheinlich die Methode OnStartup( StartupEventArgs ). Du musst sie selbst überschreiben. Zu deiner Frage, "was dort hinein soll", siehe letzte Absatz ;)

Code:
protected override void OnStartup( StartupEventArgs e ) {...}

Tust du dies nicht, wird dein Fenster nur angezeigt, weil in der App.xaml im Application-Tag die StartupUri definiert ist

Code:
<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">

Bzgl. deiner Frage zum Widerspruch zur OOP.
Schau dir doch nochmal den Quelltext genau an. Z.B. die Datei MainWindow.xaml.cs (vor Allem die erste Zeile ;) ).

Code:
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            ...
        }

        private void button1_Click( object sender, RoutedEventArgs e )
        {
            ...
        }
    }

Merkst du was? Dein MainWindow ist auch nur ein Objekt.

Bzgl. dem Überschreiben der Methode OnStartup:
I.d.R. tust du dies, wenn du mit MVVM Arbeitest.
Es ist kein Muss, aber WPF bietet sich nunmal dazu an. Falls du es noch nicht getan hast, lege ich dir nahe den Artikel von Josh Smith darüber zu lesen. Er beschreibt hier "pures" MVVM. Mittlerweile gibt es unzählige Frameworks, die seine Arbeit ergänzen/"optimieren". Versuch einfach mal dein Glück mit Google. Ich glaube, der Artikel wurde mittlerweile auch ins Deutsche übersetzt (hab ihn auf die schnelle leider nicht gefunden).

Zum Abschluss :)
Ich habe selber mal ein wenig mit WPF im Browser gearbeitet. Dieser ganze XBAP Kram hat zwar seine Vorteile, aber desto Komplexer es wird, desto mehr Probleme wirst du kriegen. Solange du dich unter Windows bewegst, ist alles gar kein Problem, aber wehe du deine App muss auch unter Linux/Mac fehlerfrei ihren Dienst verrichten. Falls letzteres zutrifft, schau dir lieber Silverlight an (aka WPF light). Man kann zwar auch hier nicht wirklich von Plattform-Unabhängigkeit reden, doch aus eigener Erfahrung kann ich dir sagen, dass du damit besser darstehst.

Viele Grüße.

edit.
Jaja.. Ich seh schon mit anderen meckern und dann selber nur halb lesen ;(
Dein Projekt ist wahrscheinlich direkt eine WPF-BrowserApplication. Was ich oben geschrieben habe, trifft nicht zu 100% (Startup) auf die WebApps zu, da du mit Page-Objekten anstelle von Fenster arbeitest. Muss leider los, werde später oder morgen die Antwort updaten. Sorry nochmal.
 
Zuletzt bearbeitet:
Zurück
Oben