C# 응용 프로그램의 여러 창간에 상호 작용하는 가장 좋은 방법은 무엇입니까? 최근에 프로그램 윈도우 중 하나가 메인 윈도우를 수정하는 메소드를 호출해야하는 문제가 발생했습니다. 내 솔루션은 모든 기본 모델 데이터를 정렬하고 여러 창 (대리인을 통해) 간의 통신을 구성하는 공장과 같은 클래스를 만드는 것이 었습니다. 그러나 하나 또는 두 명의 대표를 전달하는 것이 문제가 아니므로 다른 창에 주 창과 제대로 상호 작용하는 데 10 명의 대표가 필요한 경우 어떻게 생각 했나요? 대의원들에게 좋은 해결책이 있습니까? 좋은 방법으로 그들을 전달하는 방법 - 생성자, 속성을 통해? 또는 그 많은 대표자를 사용할 필요가 있다면 심각한 디자인 결함일까요?창 간의 상호 작용
답변
당신은 컨트롤러에 의해보기에서 모델을 분할해야합니다. 폼 참조를 가질 수 있고 공유 정보를 관리 할 수있는 객체를 배치하십시오.
다른 해결책은 formX의 참조를 formY에 전달하여 통신 할 수있게하는 것입니다.
메인 윈도우와 상호 작용할 필요가있는 경우 다른 윈도우의 생성자에서 메인 윈도우에 대한 참조를 제공하지 않는 것이 어떻습니까?
public class MainForm : Form
{
}
public class OtherForm : Form
{
protected MainForm MainForm { get; set; }
public OtherForm(MainForm mainForm) : base()
{
this.MainForm = mainForm;
}
}
편집 :
간단하고 효과적인.
양식이 다른 모든 양식의 응용 프로그램과 상호 작용해야하는 경우 service locator 유형 패턴이 더 적합 할 수 있습니다.
이전에는 MFC에서 모든 창을 알리는 것이있었습니다. 매개 변수와 함께 이벤트 ID를 전달합니다.
이벤트 ID 및 매개 변수 컬렉션을 노출하는 한 대리자와 비슷한 작업을 수행 할 수 있습니다.
가장 큰 이점은 Windows가 하나의 게이트웨이 만 구현하면된다는 것입니다.
당신은 같은 몇 가지 정보를 전달하는 사용자 정의는 EventArgs를 사용하여, 하나의 대리자를 사용할 수 등 notificaton의 종류, 추가 매개 변수,
우리는 주제/관찰자 패턴을 사용하는 사용자 지정 기본 폼 관리자를 사용합니다.
보류 된 모든 양식은 FormsManager에보고되고 FromsManager는 양식의 옵저버가됩니다.
또한 양식을 FormsManager의 관찰자로 만듭니다.
그러면 모든 양식이 FormsManager와 모든 양식을 준수하는 FormsManager를 관찰하게됩니다. 그런 다음 각 양식은 FormsManager를 통해 다른 양식과 통신 할 수 있으며 각 양식은 다른 양식을 인식 할 필요가 없습니다.
저는 이것이 내 정보가 여러 가지 방법으로 표시된다는 것을 믿습니다. (여러 개의 창 - 어떻게 든 의사 소통을해야합니다.) 관찰자는 완벽한 해결책처럼 들립니다. 고마워요! – user36890
전혀 아니에요, 이것은 프로세스 간 통신이 아닌 단일 응용 프로그램으로 창 사이에서 메시지를 보내는 것에 관한 것입니다. – Sekhat
아, 제 사과. 다시 열어 드리겠습니다. –
요청시 @TalhaIrfan이 삭제되었습니다. –