私はMVP
ビューとプレゼンターでイベントのリトル問題があります。 _artistToolbarButton_Click
イベントが発生すると、別の登録イベントが表示されます。なぜこれが起こるのですか?アニメーションをチェックすると、別のイベントからの盗聴防止メッセージボックスも表示されます。ここでC#イベントの開始ループ
私のフォームコードです:
フォーム:
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");
}
}
は、単純なコピー&ペーストの誤りであることを検索します'WireEvents' – TheLethalCoder
最小限の完全で検証可能な例(http://stackoverflow.com/help/mcve)を提供してください。ここであなたのコード全体を検索させることはできません。問題を再現するのに必要な絶対最小値まで絞り込んでください。 – HimBromBeere