2016-07-20 6 views
0

私はMVPビューとプレゼンターでイベントのリトル問題があります。 _artistToolbarButton_Clickイベントが発生すると、別の登録イベントが表示されます。なぜこれが起こるのですか?アニメーションをチェックすると、別のイベントからの盗聴防止メッセージボックスも表示されます。ここでC#イベントの開始ループ

enter image description here

私のフォームコードです:

フォーム:

public partial class MainForm : Form, IMainView 
    { 
     #region Properties 

     public IPresenter Presenter { get; set; } 

     #endregion 

     // Constructor 
     public MainForm() 
     { 
      this.InitializeComponent(); 
      this.Presenter = new MainPresenter(this); 
      this.WireEvents(); 
     } 

     public event EventHandler<EventArgs> OnLoad; 
     public event EventHandler<EventArgs> ShowArtist; 
     public event EventHandler<EventArgs> ShowLibrary; 
     public event EventHandler<EventArgs> ShowTopList; 

     // Wire events 
     private void WireEvents() 
     { 
      this.Load += new EventHandler(MainForm_Load); 
      this._artistToolbarButton.Click += new EventHandler(_artistToolbarButton_Click); 
      this._libraryToolbarButton.Click += new EventHandler(_libraryToolbarButton_Click); 
      this._topListToolbarButton.Click += new EventHandler(_topListToolbarButton_Click); 
     } 

     #region Events 
     // Load 
     private void MainForm_Load(object sender, EventArgs e) 
     { 
      if(this.OnLoad != null) 
      { 
       this.OnLoad(this, EventArgs.Empty); 
      } 
     } 

     // Artist 
     private void _artistToolbarButton_Click(object sender, EventArgs e) 
     { 
      if (this.ShowArtist != null) 
      { 
       this.ShowArtist(this, EventArgs.Empty); 
      } 
     } 

     // Library 
     private void _libraryToolbarButton_Click(object sender, EventArgs e) 
     { 
      if (this.ShowLibrary != null) 
      { 
       this.ShowLibrary(this, EventArgs.Empty); 
      } 
     } 

     // Top list 
     private void _topListToolbarButton_Click(object sender, EventArgs e) 
     { 
      if (this.ShowTopList != null) 
      { 
       this.ShowTopList(this, EventArgs.Empty); 
      } 
     } 
     #endregion 
    } 

    public class MainPresenter : IPresenter 
    { 
     private IMainView _view; 

     // Constructor 
     public MainPresenter(IMainView view) 
     { 
      this._view = view; 
      this.WireEvents(); 
     } 

     // Wire events 
     public void WireEvents() 
     { 
      this._view.OnLoad += OnLoad; 
      this._view.ShowArtist += ShowArtist; 
      this._view.ShowArtist += ShowLibrary; 
      this._view.ShowArtist += ShowTopList; 
     } 

     // On load 
     private void OnLoad(object sender, EventArgs e) 
     { 
      MessageBox.Show("OnLoad"); 
     } 

     // ShowArtist 
     private void ShowArtist(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowArtist"); 
     } 

     // ShowLibrary 
     private void ShowLibrary(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowLibrary"); 
     } 

     //ShowTopList 
     private void ShowTopList(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowTopList"); 
     } 
    } 

プレゼンター:

public class MainPresenter : IPresenter 
    { 
     private IMainView _view; 

     // Constructor 
     public MainPresenter(IMainView view) 
     { 
      this._view = view; 
      this.WireEvents(); 
     } 

     // Wire events 
     public void WireEvents() 
     { 
      this._view.OnLoad += OnLoad; 
      this._view.ShowArtist += ShowArtist; 
      this._view.ShowArtist += ShowLibrary; 
      this._view.ShowArtist += ShowTopList; 
     } 

     // On load 
     private void OnLoad(object sender, EventArgs e) 
     { 
      MessageBox.Show("OnLoad"); 
     } 

     // ShowArtist 
     private void ShowArtist(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowArtist"); 
     } 

     // ShowLibrary 
     private void ShowLibrary(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowLibrary"); 
     } 

     //ShowTopList 
     private void ShowTopList(object sender, EventArgs e) 
     { 
      MessageBox.Show("ShowTopList"); 
     } 
    } 
+0

は、単純なコピー&ペーストの誤りであることを検索します'WireEvents' – TheLethalCoder

+1

最小限の完全で検証可能な例(http://stackoverflow.com/help/mcve)を提供してください。ここであなたのコード全体を検索させることはできません。問題を再現するのに必要な絶対最小値まで絞り込んでください。 – HimBromBeere

答えて

2

あなたのコードはintを変更Oこの1:

// Wire events 
public void WireEvents() 
{ 
    this._view.OnLoad += OnLoad; 
    this._view.ShowArtist += ShowArtist; 
    this._view.ShowLibrary += ShowLibrary; 
    this._view.ShowTopList += ShowTopList; 
} 

それは単にイベントリンクエラーです:)

1

あなたが適切にプレゼンター内のイベントをサブスクライブする必要があります

関連する問題