Je utilise beaucoup MDI, je l'aime beaucoup plus (lorsqu'il peut être utilisé) que de multiples formulaires flottants.
Mais pour en tirer le meilleur parti, vous devez comprendre vos propres événements. Cela vous facilite tellement la vie.
Un exemple squelettique.
Avoir vos propres types d'interruption,
//Clock, Stock et Accoubts représentent les formulaires réels dans
//l'application MDI. Lorsque j'ai plusieurs copies d'un formulaire
//je leur donne également un ID, au moment de leur création, puis
//incluez cet ID dans la classe Args.
public enum InteruptSource
{
IS_CLOCK = 0, IS_STOCKS, IS_ACCOUNTS
}
//Ce type d'événement particulier est basé sur le temps,
//mais vous pouvez y ajouter d'autres, tels que des événements
//basés sur des documents.
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
{
//Source du formulaire MDI
public InteruptSource source { get; set; }
//Type d'interruption
public EVInterupts clockInt { get; set; }
//dans ce cas seule une date est nécessaire
//mais normalement j'inclus des données optionnelles (comme un type C UNION)
//le formulaire qui répond à l'événement décide si
//les données sont pour lui.
public DateTime date { get; set; }
//CI_STOCKIN
public StockClass inStock { get; set; }
}
Ensuite utilisez le délégué dans votre namespace, mais en dehors d'une classe
namespace MyApplication
{
public delegate void StoreHandler(object sender, ControlArgs e);
public partial class Form1 : Form
{
//votre formulaire principal
}
Maintenant, manuellement ou en utilisant l'interface graphique, faites en sorte que le MDIparent réponde aux événements des formulaires enfants.
Mais avec votre propre Args, vous pouvez réduire cela à une seule fonction. et vous pouvez avoir une disposition pour interrompre les interruptions, bon pour le débogage, mais peut être utile de d'autres manières aussi.
Il vous suffit d'avoir tous vos codes d'événement mdiparent pointer vers une seule fonction,
calendar.Vendredi += new StoreHandler(MyEvents);
calendar.Samedi += new StoreHandler(MyEvents);
calendar.Dimanche += new StoreHandler(MyEvents);
calendar.JourDePaie += new StoreHandler(MyEvents);
calendar.NouvelAn += new StoreHandler(MyEvents);
Un mécanisme de commutation simple est généralement suffisant pour transmettre les événements aux formulaires appropriés.
0 votes
La méthode canonique consiste à exposer les propriétés dans le formulaire enfant avec les informations dont vous avez besoin disponibles.