Saya menggunakan MDI cukup banyak, saya sangat menyukainya (di mana dapat digunakan) daripada beberapa bentuk mengambang.
Tetapi untuk mendapatkan yang terbaik dari itu, Anda harus memahami acara Anda sendiri. Itu membuat hidup jadi lebih mudah bagi Anda.
Contoh kerangka.
Memiliki tipe interupt Anda sendiri,
//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
}
Kemudian tipe Args Anda sendiri
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; }
}
Kemudian gunakan delegasi di dalam namespace Anda, tetapi di luar kelas
namespace MyApplication
{
public delegate void StoreHandler(object sender, ControlArgs e);
public partial class Form1 : Form
{
//your main form
}
Sekarang baik secara manual atau menggunakan GUI, minta MDIparent menanggapi peristiwa bentuk anak.
Tetapi dengan owr Args Anda, Anda dapat mengurangi ini menjadi satu fungsi. dan Anda dapat memiliki ketentuan untuk menghentikan interupsi, baik untuk debugging, tetapi dapat bermanfaat dengan cara lain juga.
Hanya minta al dari kode acara mdiparent Anda menunjuk ke satu fungsi,
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);
Mekanisme sakelar sederhana biasanya cukup untuk meneruskan acara ke formulir yang sesuai.