2016-04-21 7 views
0

Hier ist der entsprechende Code:C# - Tiertrennung - Wie werden diese Delegaten verwendet?

ClickMeGame.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ClassLibrary 
{ 
    public class ClickMeGame 
{ 
    public OnClickMe onClickMeCallback; 

    public int score; 

    public ClickMeGame() 
    { 
     score = 0; 
    } 

    private void IncrementScore() 
    { 
     score++; 
    } 
} 
} 

ClickMeCallBackDefinitions.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ClassLibrary 
{ 
    public delegate void OnClickMe(); 
} 

MainWindow.cs (Windows Form)

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using ClassLibrary; 

namespace ClickMe 
{ 
    public partial class mainWindow : Form 
{ 
    private ClickMeGame game; 

    public mainWindow() 
    { 
     InitializeComponent(); 

     game = new ClickMeGame(); 
     game.onClickMeCallback = clickMeButton_Click(); 

    } 

    private void clickMeButton_Click(object sender, EventArgs e) 
    { 
     UpdateUI(); 
    } 

    private void UpdateUI() 
    { 
     scoreLabel.Text = string.Format("The score is: {0}", game.score); 
    } 
} 
} 

Also was ich versuche zu tun ist, wenn der Benutzer eine Schaltfläche auf dem Formular anklickt, möchte ich eine Bezeichnung auf dem Formular mit der Spielpunktzahl aktualisieren, die mit jedem Klick erhöht.

Ich lerne über/will in der Lage sein, dies mit Delegierten zu tun, in dem ich das Projekt in 2 Stufen trennen möchte; Präsentation und Logik. Ich weiß, dass es unnötig ist, aber ich möchte es so machen, dass das Windows Form, wenn du auf den Button klickst, über Delegaten/Callback-Methoden Informationen über den Spielstand erhält. Ich bin mir nicht sicher, wie das geht, aber ich habe versucht, die Callback-Definition zu machen und darauf zu verweisen, aber ich bin von dort verloren.

+0

Schreiben Sie einfach 'game.onClickMeCallback = UpdateUi;' –

Antwort

0

Angenommen, die UI-Schaltfläche verwendet das Klickereignis clickMeButton_Click.

public partial class mainWindow : Form 
{ 
    private ClickMeGame game; 

    public mainWindow() 
    { 
     InitializeComponent(); 

     game = new ClickMeGame(); 
     game.onClickMeCallback = param => UpdateUI(); 

    } 

    private void clickMeButton_Click(object sender, EventArgs e) 
    { 
     game.onClickMeCallback.Invoke(); 
    } 

    private void UpdateUI() 
    { 
     scoreLabel.Text = string.Format("The score is: {0}", game.score); 
    } 
} 
Verwandte Themen