Как метод в winform слушает событие / делегат в App_Code, а не получает нулевое событие? - PullRequest
0 голосов
/ 07 июля 2011

Сценарий -

Программа открывает winForm. Пользователь вводит информацию, нажимает кнопку Пуск. Действие переносится в код в App_Code.Model. Когда этот код завершается, код winForm должен отображать обновленную информацию. App_Code.Model не должен знать о winForm. В этом случае winForm имеет кнопку btnStart и текстовое поле tbInput.

Но когда событие поднято, оно пустое, поэтому я что-то делаю не так. Обратите внимание, что речь идет не о событиях, вызванных пользовательскими элементами управления winForms, я знаю, что в Интернете есть много информации об этом.

App_Code.Model используя Систему; using System.Collections.Generic; использование System.Linq; используя System.Text;

namespace EventsTest.App_Code.Model
{
    public delegate void TableViewChangeHandler(object sender, HandChangedEventArgs e);

    public class HandChangedEventArgs : EventArgs{
        public int HandNum { get; set; }
        public int PlayerNum { get; set; }
        public HandChangedEventArgs(int handNum, int playerNum){
            HandNum = handNum;
            PlayerNum = playerNum;
        }
    }
    public class Game{
        public event TableViewChangeHandler TableViewChanged;
        public void PrepareGame(){
            int value = -1;
            if (TableViewChanged != null)
                TableViewChanged(this, new HandChangedEventArgs(value, 0));
            else
                value = 2;//used to set toggle to catch debugger
        }
    }
}

код формы используя Систему; using System.Collections.Generic; using System.ComponentModel; используя System.Data; использование System.Drawing; использование System.Linq; используя System.Text; использование System.Windows.Forms; using EventsTest.App_Code.Model;

namespace EventsTest
{
    public partial class testForm : Form{
        public testForm(){
            InitializeComponent();
            Game myGame = new Game();
            myGame.TableViewChanged += this.HandleTableViewChange;
        }
        private void btnStart_Click(object sender, EventArgs e) {
            Game myGame = new Game();
            myGame.PrepareGame();
        }
        public void HandleTableViewChange(object sender, HandChangedEventArgs e){
            this.tbInput.Text = "Raised";
        }
    }
}

1 Ответ

0 голосов
/ 08 июля 2011

Может быть, я понимаю. У вас есть два экземпляра класса Game:

  1. Находится в форме и подписывается на событие.

  2. В методе btnStart_Click, который не подписывается на событие и не вызывает PrepareGame (), поэтому вы не получаете уведомление о событии.

Переместите код субасписки вашего события в обработчик нажатия кнопки, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...