나는 MDI를 상당히 많이 사용하며 여러 부동 형식보다 훨씬 더 (사용할 수있는 곳) 좋아합니다.
그러나 그것을 최대한 활용하려면 자신의 이벤트를 파악해야합니다. 인생이 훨씬 쉬워집니다.
골격 예.
자신의 무차별 유형을 가지고
//Clock, Stock and Accoubts represent the actual forms in
//the MDI application. When I have multiple copies of a form
//I also give them an ID, at the time they are created, then
//include that ID in the Args class.
public enum InteruptSource
{
IS_CLOCK = 0, IS_STOCKS, IS_ACCOUNTS
}
//This particular event type is time based,
//but you can add others to it, such as document
//based.
public enum EVInterupts
{
CI_NEWDAY = 0, CI_NEWMONTH, CI_NEWYEAR, CI_PAYDAY, CI_STOCKPAYOUT,
CI_STOCKIN, DO_NEWEMAIL, DO_SAVETOARCHIVE
}
그런 다음 자신의 Args 유형
public class ControlArgs
{
//MDI form source
public InteruptSource source { get; set; }
//Interrupt type
public EVInterupts clockInt { get; set; }
//in this case only a date is needed
//but normally I include optional data (as if a C UNION type)
//the form that responds to the event decides if
//the data is for it.
public DateTime date { get; set; }
//CI_STOCKIN
public StockClass inStock { get; set; }
}
그런 다음 네임 스페이스 내에서, 클래스 외부에서 델리게이트를 사용하십시오.
namespace MyApplication
{
public delegate void StoreHandler(object sender, ControlArgs e);
public partial class Form1 : Form
{
//your main form
}
이제 수동으로 또는 GUI를 사용하여 MDIparent가 자식 양식의 이벤트에 응답하게합니다.
그러나 owr Args를 사용하면이를 단일 기능으로 줄일 수 있습니다. 그리고 interupts를 방해하고, 디버깅에는 유용하지만 다른 방법으로도 유용 할 수 있습니다.
mdiparent 이벤트 코드 중 하나가 하나의 함수를 가리 키도록하십시오.
calendar.Friday += new StoreHandler(MyEvents);
calendar.Saturday += new StoreHandler(MyEvents);
calendar.Sunday += new StoreHandler(MyEvents);
calendar.PayDay += new StoreHandler(MyEvents);
calendar.NewYear += new StoreHandler(MyEvents);
간단한 스위치 메커니즘만으로도 적절한 형식으로 이벤트를 전달할 수 있습니다.