2016-12-22 3 views
4

Okay, also das ist meine erste Windows Forms App und ich habe Schwierigkeiten, meinen Code zu strukturieren. begann alles in die Form1 Klasse, die standardmäßig zur Verfügung gestellt, alles zu schnell gewachsen. Ich bin mir bewusst, dass dies eine ziemlich schlechte Programmierpraxis ist, also begann ich etwas sauber zu machen und machte verschiedene Klassen, um das Prinzip der individuellen Verantwortung zu erfüllen. Da jedoch einige Schaltflächen- und Grid-bezogene Ereignisse in der Klasse Form1 gut funktionieren, bringt es sie zum Absturz und ich habe keine Ahnung, wie es gemacht werden sollte.Windows Formulare organisieren Code

public partial class Form1 
{ 


    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void method1(object sender, EventArgs e) 
    { 
      //CODE 
    } 



    private void method2(object sender, DataGridViewCellEventArgs e) 
    { 
      //CODE 
    } 



    private void method3(object sender, EventArgs e) 
    { 
      //CODE 
    } 

} 

so würde Ich mag method1, bewege method2, method3 usw. zu einer anderen Klasse (oder verschiedene Klassen), aber ziemlich verlor, wie dies zu tun, ohne die App zu brechen. naja, privat ist es offensichtlich öffentlich, Zugriff zu gewähren, aber ich habe keine Idee, wie ich diese Methoden danach in der Klasse Form1 aufrufen soll. als ich neue Klassen erstellt und dann versucht habe, die Methoden für ein Ereignis aufzurufen, wie onClick: Newclass.method1(), hat es nicht funktioniert. Eine Sache, an die ich denken könnte, ist wie eine Methode in Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass() anzurufen, aber das scheint eine plumpe Lösung zu sein ... Ich bin mir sicher, es gibt bessere Möglichkeiten, dies zu lösen, ich weiß einfach nicht wie. Rat geschätzt, danke

+1

Ich würde empfehlen, die Event-Handler im Formular zu lassen. – stuartd

+0

Sie haben wahrscheinlich mehr Glück, wenn Sie die Antwort erhalten, die Sie brauchen, wenn Sie besser definiert haben, was "es nicht funktioniert" bedeutet. Compilerfehler? Absturz? Ausnahme? –

Antwort

3

Sie sollten die Ereignishandler im Formular behalten, aber Sie können den Code in eine andere Klasse verschieben. Wenn Sie Ihre Klasse anrufen möchten, können Sie sie nicht direkt anrufen. Sie brauchen so etwas wie dies zu tun:

YourClass class1 = new YourClass(); 

Sie können auch erklären statisch dann nur Sie es brauchen einmal zu anrufen.

private static YourClass class1 = new YourClass(); 

Dann können Sie Ihre Methode wie folgt verwenden:

class1.YourMethod(); 
+0

Oder machen Sie die Methode statisch. –

+0

Ja, das wäre die bessere Lösung. Ich werde meine Antwort bearbeiten – nicoh

+0

danke für die Empfehlung, das ist der Weg, den es dauerte und es funktioniert wie erwartet. Ich habe die Klasse nicht statisch gemacht, sondern sie instanziiert. Prost – mihocu

0

Das sind die Event-Handler für die Schaltfläche Ereignisse. Wenn Sie die Methode an anderer Stelle angeben möchten, müssen Sie den Ereignishandler manuell in Ihrem Code hinter verdrahten.

Der Code für den Draht gerade jetzt in der Designer-Datei ist, werden Sie so etwas wie sehen:

button1.Click += new System.EventHandler(method1); 

Ich würde sagen, es ist ok die Event-Handler hinter dem Code zu haben und einfach Rufen Sie eine Art von Regelmethode aus einer anderen Klasse auf, die Sie an anderer Stelle geschrieben haben. Es ist keine Schande, dass ein Code im Code dahinter steckt.

Am Ende des Tages muss der Designer auf den richtigen Event-Handler zeigen und wenn Sie ihn aus der Klasse Form1.cs verschieben, müssen Sie ihn auf den richtigen Platz zeigen.

Verwandte Themen