내 코드를보고 내가 잘못 된 곳을 알려주시겠습니까? 다음 코드에서는 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;
}
}
}
아마 이벤트가 당신의
.Detach()
전화 후 해고하거나, 전혀 해고되지 않습니다입니다 무슨 일 테스트 장치/또는 주()
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();
}
}
}
위 내 소스 코드를 업데이트 한
내 실수라고 생각 :
나는 (내가 그걸! 사용 왜 생각을) 속성을 제거하여 대신 방법을 사용하여 고정 왜냐하면 나는 Form 클래스의 프라퍼티 대신에 프라퍼티를 사용했기 때문입니다. –
간단한 설명뿐입니다. 답을 얻은 후에는 질문을 편집하지 마십시오. 질문을 그대로두고 아래 섹션에 답변을 넣어주십시오. 그러면 미래의 독자는 무엇에 대해 혼란스러워하지 않습니까? 원래의 문제가있었습니다. – ean5533