MDI'yi çok fazla kullanıyorum, birden fazla yüzen formdan çok daha fazla (kullanılabileceği yerde) seviyorum.
Ancak ondan en iyi şekilde yararlanmak için kendi olaylarınızla başa çıkmanız gerekir. Hayatı sizin için çok daha kolay hale getirir.
İskelet örneği.
Kendi interupt tipleriniz var,
//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
}
Sonra kendi Args türünüz
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; }
}
Ardından, temsilci ad alanınızda, ancak sınıf dışında kullanın
namespace MyApplication
{
public delegate void StoreHandler(object sender, ControlArgs e);
public partial class Form1 : Form
{
//your main form
}
Şimdi el ile veya GUI kullanarak, MDIparent alt formların olaylara yanıt var.
Ancak owr Args ile bunu tek bir işleve indirgeyebilirsiniz. ve kesintileri kesmek için iyi, ancak başka şekillerde de yararlı olabilir.
Tüm mdiparent olay kodlarınızın tek bir işlevi göstermesini sağlayın,
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);
Basit bir anahtar mekanizması genellikle olayları uygun formlara aktarmak için yeterlidir.