form2를 닫을 때 Form1을 새로 고칠 수 있습니까?
문제
양식 2가 닫히면 Form1을 새로 고치고 자합니다. 나는 Form2의 마감 이벤트를 사용한다는 것을 알고 있지만, 그 곳은 내가 길을 잃는 곳입니다.
감사
해결책
이를 달성하는 좋은 방법은 중재자 패턴을 사용하는 것입니다. 이런 식으로 당신의 양식은 반드시 서로에 대해 알 필요는 없습니다. 중재자가 양식 간의 상호 작용을 관리하도록 허용하여 각 개별 양식이 자체 책임에 집중할 수 있습니다.
원하는 것을 달성 할 수있는 매우 조잡한 중재자는 그렇게 구현 될 수 있습니다.
public class FormMediator
{
public Form MainForm { private get; set; }
public Form SubForm { private get; set; }
public void InitializeMediator()
{
MainForm.FormClosed += MainForm_FormClosed;
}
void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
SubForm.Refresh();
}
}
이제 기본 양식이 닫힐 때마다 하위 양식이 업데이트되며 서로에 대해 아무것도 알 필요가 없습니다.
편집하다:
좋아, 그래서 나는 당신이 시작할 수있는이 솔루션을 제거 할 것입니다. 그러나 이것은 중재자 패턴의 초보적인 구현 일뿐입니다. 무슨 일이 일어나고 있는지 더 잘 이해하기 위해 그 패턴에 대해 읽고 일반적으로 디자인 패턴을 읽도록 격려합니다.
다시 말하지만, 이것은 샘플이지만 몇 가지 기본 오류 확인이 있으며 가야합니다.
양식 선언은 다음과 같이 보일 것입니다.
public partial class MainForm : Form
{
private FormMediator _formMediator;
public MainForm()
{
InitializeComponent();
}
public void SomeMethodThatOpensTheSubForm()
{
SubForm subForm = new SubForm();
_formMediator = new FormMediator(this, subForm);
subForm.Show(this);
}
}
중재자의 수정 된 구현은 다음과 같습니다.
public class FormMediator
{
private Form _subForm;
private Form _mainForm;
public FormMediator(Form mainForm, Form subForm)
{
if (mainForm == null)
throw new ArgumentNullException("mainForm");
if (subForm == null)
throw new ArgumentNullException("subForm");
_mainForm = mainForm;
_subForm = subForm;
_subForm.FormClosed += MainForm_FormClosed;
}
void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
_mainForm.Refresh();
}
catch(NullReferenceException ex)
{
throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex);
}
}
}
다른 팁
하나의 해결책은 생성자에서 Form1의 참조를 전달하고 Form2의 마감 이벤트에서 f1.invalidate (true)를 호출하는 것입니다.
제휴하지 않습니다 StackOverflow