以下是相关代码:
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窗体通过委托/回调方法接收有关游戏得分的信息。我不知道该怎么做,但我试着做了回调定义并引用了它,但是我迷失了方向。
发布于 2016-04-21 23:53:43
假设UI按钮使用单击事件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);
}
}https://stackoverflow.com/questions/36782321
复制相似问题