2016-04-21 46 views
0

下面是相關代碼:C# - 層分離 - 如何使用這些代表?

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窗體)

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); 
    } 
} 
} 

所以我想要做的是,當用戶點擊表單上的一個按鈕時,我希望表單上的標籤隨遊戲分數更新,並隨着每次點擊而增加。

我正在學習/希望能夠與代表這樣做,因爲我想將項目分成兩層;出版與邏輯。我知道這樣做沒有必要,但是我希望這樣做,當您單擊按鈕時,Windows窗體通過代理/回調方法接收關於遊戲得分的信息。我不確定如何做到這一點,但我嘗試了回調定義並引用它,但是我從那裏失去了。

+0

只要寫'game.onClickMeCallback = UpdateUi; –

回答

0

假設UI按鈕使用click事件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); 
    } 
}