/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace MDIRelatives { /// <summary> /// Summary description for MDIRelatives. /// </summary> public class MDIRelatives : System.Windows.Forms.Form { internal System.Windows.Forms.MainMenu MainMenu1; internal System.Windows.Forms.MenuItem MenuItem1; internal System.Windows.Forms.MenuItem mnuCascade; internal System.Windows.Forms.MenuItem mnuTileV; internal System.Windows.Forms.MenuItem mnuTileH; internal System.Windows.Forms.MenuItem mnuMinimizeAll; internal System.Windows.Forms.ImageList imgButtons; internal System.Windows.Forms.ToolBar ToolBar1; internal System.Windows.Forms.ToolBarButton cmdNew; internal System.Windows.Forms.ToolBarButton cmdClose; private System.ComponentModel.IContainer components; public MDIRelatives() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MDIRelatives)); this.MainMenu1 = new System.Windows.Forms.MainMenu(); this.MenuItem1 = new System.Windows.Forms.MenuItem(); this.mnuCascade = new System.Windows.Forms.MenuItem(); this.mnuTileV = new System.Windows.Forms.MenuItem(); this.mnuTileH = new System.Windows.Forms.MenuItem(); this.mnuMinimizeAll = new System.Windows.Forms.MenuItem(); this.imgButtons = new System.Windows.Forms.ImageList(this.components); this.ToolBar1 = new System.Windows.Forms.ToolBar(); this.cmdNew = new System.Windows.Forms.ToolBarButton(); this.cmdClose = new System.Windows.Forms.ToolBarButton(); this.SuspendLayout(); // // MainMenu1 // this.MainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.MenuItem1}); // // MenuItem1 // this.MenuItem1.Index = 0; this.MenuItem1.MdiList = true; this.MenuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuCascade, this.mnuTileV, this.mnuTileH, this.mnuMinimizeAll}); this.MenuItem1.Text = "Window"; // // mnuCascade // this.mnuCascade.Index = 0; this.mnuCascade.Text = "Cascase"; this.mnuCascade.Click += new System.EventHandler(this.mnuCascade_Click); // // mnuTileV // this.mnuTileV.Index = 1; this.mnuTileV.Text = "Tile Vertical"; this.mnuTileV.Click += new System.EventHandler(this.mnuTileV_Click); // // mnuTileH // this.mnuTileH.Index = 2; this.mnuTileH.Text = "Tile Horizontal"; this.mnuTileH.Click += new System.EventHandler(this.mnuTileH_Click); // // mnuMinimizeAll // this.mnuMinimizeAll.Index = 3; this.mnuMinimizeAll.Text = "Minimize All"; this.mnuMinimizeAll.Click += new System.EventHandler(this.mnuMinimizeAll_Click); // // imgButtons // this.imgButtons.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.imgButtons.ImageSize = new System.Drawing.Size(16, 16); this.imgButtons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgButtons.ImageStream"))); this.imgButtons.TransparentColor = System.Drawing.Color.Transparent; // // ToolBar1 // this.ToolBar1.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; this.ToolBar1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.ToolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.cmdNew, this.cmdClose}); this.ToolBar1.DropDownArrows = true; this.ToolBar1.ImageList = this.imgButtons; this.ToolBar1.Name = "ToolBar1"; this.ToolBar1.ShowToolTips = true; this.ToolBar1.Size = new System.Drawing.Size(292, 41); this.ToolBar1.TabIndex = 4; this.ToolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.ToolBar1_ButtonClick); // // cmdNew // this.cmdNew.ImageIndex = 0; this.cmdNew.Text = "New"; // // cmdClose // this.cmdClose.ImageIndex = 1; this.cmdClose.Text = "Close"; // // MDIRelatives // this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.ToolBar1}); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.IsMdiContainer = true; this.Menu = this.MainMenu1; this.Name = "MDIRelatives"; this.Text = "MDIRelatives"; this.ResumeLayout(false); } #endregion [STAThread] static void Main() { Application.Run(new MDIRelatives()); } private string synchronizedText = "text"; private int mdiCount = 0; private void ToolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { // Determine which button was clicked. if (e.Button == cmdNew) { // Show a new ChildForm. Child frmChild = new Child(); frmChild.MdiMDIRelatives = this; frmChild.RefreshText(synchronizedText); mdiCount++; frmChild.Text = "MDI Child # " + mdiCount.ToString(); frmChild.Show(); } else if (e.Button == cmdClose) { // Close the active child. this.ActiveMdiChild.Close(); } } public void RefreshChildren(Child sender, string text) { // Store text for use when creating a child form, or if needed later. synchronizedText = text; // Update children. foreach (Child frm in this.MdiChildren) { if (frm != sender) { frm.RefreshText(text); } } } private void mnuMinimizeAll_Click(object sender, System.EventArgs e) { foreach (Form frm in this.MdiChildren) { frm.WindowState = FormWindowState.Minimized; } } private void mnuTileH_Click(object sender, System.EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } private void mnuTileV_Click(object sender, System.EventArgs e) { this.LayoutMdi(MdiLayout.TileVertical); } private void mnuCascade_Click(object sender, System.EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } } } //=========================================================== //=========================================================== using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace MDIRelatives { /// <summary> /// Summary description for Child. /// </summary> public class Child : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Child() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // textBox1 // this.textBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right); this.textBox1.Location = new System.Drawing.Point(8, 8); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(212, 108); this.textBox1.TabIndex = 1; this.textBox1.Text = "textBox1"; this.textBox1.TextChanged += new System.EventHandler(this.TextBox1_TextChanged); // // Child // this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); this.ClientSize = new System.Drawing.Size(228, 126); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.textBox1}); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Name = "Child"; this.Text = "Child"; this.ResumeLayout(false); } #endregion internal System.Windows.Forms.TextBox textBox1; private bool isUpdating; private void TextBox1_TextChanged(object sender, System.EventArgs e) { if (this.MdiParent != null && !isUpdating) { // The reference to the MDI parent must be converted to the appropriate // form class in order to access the custom RefreshChildren() method. ((Parent)this.MdiParent).RefreshChildren(this, textBox1.Text); } } public void RefreshText(string text) { // Disable the event to prevent an endless string of updates. isUpdating = true; // Update the control. textBox1.Text = text; // Re-enable the event handler. isUpdating = false; } } } MDIRelatives.zip( 38 k)