[英]Delegate doesn't notify the method
您能否看一下我的代碼並告訴我哪里出了問題? 在以下代碼中,我試圖在Form1最大化時向myMethod()
方法發送通知。
謝謝!
namespace WindowsDelegate1
{
public delegate void ChangedEventHandler(object sender, EventArgs e);
class myForm : Form
{
public event ChangedEventHandler Changed;
protected virtual void OnChanged(EventArgs e)
{
if (Changed != null)
Changed(this,e);
}
public override System.Drawing.Size MaximumSize
{
//get
//{
// return base.MaximumSize;
//}
set
{
base.MaximumSize = value;
OnChanged(EventArgs.Empty);
}
}
}
}
namespace WindowsDelegate1
{
class EventListener
{
private myForm TheForm;
public EventListener(myForm theform)
{
TheForm = theform;
TheForm.Changed += new ChangedEventHandler(myMethod);
}
private void myMethod(object sender, EventArgs e)
{
MessageBox.Show("hey, window should be maximized now!");
}
public void Detach()
{
TheForm.Changed -= new ChangedEventHandler(myMethod);
TheForm = null;
}
}
}
這是測試單元/或main()
namespace WindowsDelegate1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
myForm f = new myForm();
EventListener listener = new EventListener(f);
f.ShowDialog();
f.WindowState = FormWindowState.Maximized;
listener.Detach();
}
}
}
可能發生的情況是該事件要么在您的.Detach()
調用之后觸發,要么根本沒有觸發。 我將從刪除listener.Detach()
調用開始。 通常,您在創建表單或加載表單時附加事件,並在卸載時分離。
除此之外,您的Detach
方法還有問題,因為它試圖刪除與ChangedEventHandler
實例不同的ChangedEventHandler
實例。 如果將方法包裝在ChangedEventHandler
,則需要存儲添加的實例。
感謝您分享您的想法!
我固定它通過消除財產(不知道為什么我用!!)和使用方法,而不是通過:
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
OnChanged(EventArgs.Empty);
}
我也更新了我的源代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.