آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آموزش انواع زبان های برنامه نویسی
آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آموزش انواع زبان های برنامه نویسی

نحوه باز کردن تنها یک فرم در فرم پدر در ویندوز فرم

نحوه باز کردن تنها یک فرم در فرم پدر  در ویندوز فرم


ما در این مثال قصد داریم که دو فرم داشته باشیم و تنها یک فرم در فرم پدر فعال باشد و در یک منو آیتم هم لیست فرم های باز نمایش داده شود و با هربار کلیک بر روی آن فرم مورد نظر باز شود.


1- ابتدا متد زیر را می نویسیم



        private void ShowForm(Form childForm, FormWindowState windowState)

        {

            this.Refresh();

            foreach (Form frm in this.MdiChildren)

            {

                if (frm.Text == childForm.Text)

                {

                    frm.Activate();

                    childForm.Dispose();

                    return;

                }

            }


            ToolStripItem item = toolStripDropDownButton1.DropDownItems.Add(childForm.Text);

            item.Name = childForm.Name;


            childForm.MdiParent = this;

            if (windowState == FormWindowState.Maximized)

            {

                childForm.WindowState = FormWindowState.Normal;


                childForm.Width = this.ClientRectangle.Width - 20;// _MaxWidth;

                childForm.Height = this.ClientRectangle.Height - 50;//_MaxHeight;

                childForm.MaximizeBox = false;

            }

            else

                childForm.WindowState = windowState;


            childForm.StartPosition = FormStartPosition.CenterScreen;

            childForm.FormClosed += new FormClosedEventHandler(childForm_FormClosed);


            childForm.Show();

        }


2- برای بستن فرم ها هم از متد زیر استفاده می کنیم


        private void childForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            string childName = ((Form)sender).Name;


            if (e.CloseReason == CloseReason.UserClosing)

            {

                ToolStripItem item = toolStripDropDownButton1.DropDownItems.Cast<ToolStripItem>().Where(p => p.Name == childName).FirstOrDefault();

                if (item != null)

                {

                    toolStripDropDownButton1.DropDownItems.Remove(item);

                    item.Dispose();

                }

            }

        }


3- هنگام نمایش دادن فرم ها بصورت  زیر عمل می کنیم


             FormNew frmnew=new FormNew();

             ShowForm(frmnew, FormWindowState.Normal);


4-  در تول استریپ دراپ دان هم کد زیر را قرار می دهیم تا با هر بار کلیک بر روی آن فرم مورد نظر باز شود.


    private void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)

        {

            Form frm = this.MdiChildren.Where(p => p.Name == e.ClickedItem.Name).FirstOrDefault();

            if (frm != null)

            {

                if (frm.MaximizeBox)

                    frm.WindowState = FormWindowState.Maximized;

                else

                    frm.WindowState = FormWindowState.Normal;

                frm.StartPosition = FormStartPosition.CenterParent;

                frm.Activate();

            }

        }


و با استفاده از کد های بالا به سادگی می توانید فرم های خود را مدیریت کنیم



گاهی اقات لازم است که یک منو داشته باشیم تا هر چه فرم باز شده است را ببندیم به همین دلیل ما یک منو تول استریپ اضافه کردیم و کد زیر را در آن می نویسیم


   private void ToolStripMenuItemCloseAll_Click(object sender, EventArgs e)

        {

            this.CloseAll();

        }

        private void CloseAll()

        {

            foreach (Form child in this.MdiChildren)

            {

                child.Close();

                child.Dispose();

            }

        }

و برای اینکه این دکمه فقط در زمانی فعال باشد که فرمی باز شده است یا خیر از کد زیر استفاده می کنیم


  private void toolStripDropDownButton1_DropDownOpening(object sender, EventArgs e)

        {

            if (this.MdiChildren.Count() > 0)

                ToolStripMenuItemCloseAll.Enabled = true;

            else

                ToolStripMenuItemCloseAll.Enabled = false;

        }