J'utilise beaucoup MDI, je l'aime beaucoup plus (où il peut être utilisé) que plusieurs formulaires flottants.
Mais pour en tirer le meilleur parti, vous devez vous familiariser avec vos propres événements. Cela vous rend la vie tellement plus facile.
Un exemple squelettique.
Ayez vos propres types d'interruptions,
//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
}
Ensuite, votre propre type 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; }
}
Ensuite, utilisez le délégué dans votre espace de noms, mais en dehors d'une classe
namespace MyApplication
{
public delegate void StoreHandler(object sender, ControlArgs e);
public partial class Form1 : Form
{
//your main form
}
Maintenant, manuellement ou à l'aide de l'interface graphique, demandez au MDIparent de répondre aux événements des formulaires enfants.
Mais avec votre owr Args, vous pouvez réduire cela à une seule fonction. et vous pouvez avoir la possibilité d'interrompre les interruptions, bon pour le débogage, mais peut être utile à d'autres égards.
Faites simplement pointer tous vos codes d'événement mdiparent vers une fonction,
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);
Un simple mécanisme de commutation suffit généralement pour transmettre les événements aux formulaires appropriés.