ایجاد لیستی از tab ها در منو با استفاده از #C

سه شنبه 22 دی 1394

به هر ویرایشگر متنی که نگاه کنید ، یک منو Window دارد که لیستی از tab ها را نشان می دهد . پس این منو Window در هر ویراشگری برای مدیریت لیستی از tab ها اهمیت دارد. همچنین برای تغییر یک Tab براحتی می توانید از منو Window استفاده کنید.

 ایجاد لیستی از tab ها در منو با استفاده از #C

 به هر ویرایشگر متنی که نگاه کنید ، یک منو  Window  دارد که لیستی از  tab ها را نشان می دهد . پس این منو  Window  در هر ویراشگری برای مدیریت لیستی از  tab  ها اهمیت دارد. همچنین برای تغییر یک Tab براحتی می توانید از منو  Window  استفاده کنید.

برای ایجاد چنین منویی که لیستی از  tab  ها را نشان می دهد تابع لیست پنجره ها  نوشته می شود که با تغییر در tab  ها ، آیتم های منو نیز تغییر میکند. اگر یک tab  جدید ایجاد کنید تابع لیست برای اصلاح لیست آیتم ها در منو  Window  فراخوانی می شود. هر زمان که  tab  ها در tabcontrol تغییر کنند فقط تابع  لیست  فراخوانی می شود. 

نحوه کار آن به این صورت می باشد:  ابتدا همه آیتم های منوی بازشونده حذف می شوند سپس همه  tab  ها از  tabControl  خوانده شده و به  TabControl.TabCollection اضافه می شوند .

اکنون هر  tabpage  در  TabCollection با استفاده از  دستور  foreach()  خوانده می شود ، با استفاده از کلاس  ToolStripMenuItem  یک آیتم جدید ایجاد می شود و برای هر MenuItem  متنی را به عنوان متن tabpage  تنظیم می شود. و menuitem  ها را به منو  Window  اضافه میکنیم. در آخر برای هر آیتم منو ، رویداد کلیک اضافه میکنیم و تابعی برای آن می نویسیم.

برای پیاده سازی آن به صورت زیر عمل میکنیم :

یک  Windows Forms Application  ایجاد کنید. با استفاده از  drag & drop  یک   MenuStrip به فرم اضافه کرده و اجزاء زیر را در آن قرار دهید . 

TabControl  را نیز به فرم اضافه کنید و tabPage  های آن را حذف کنید.

متغیر سراسری را اعلان کنید :     

public static int count = 1;

تابع لیست پنجره ها را به صورت زیر در فرم قرار دهید .

    //*************************************************************************************  
    // Update windows list to Window menu  
    //*************************************************************************************  
    public void UpdateWindowsList_WindowMenu()  
    {  
        //get all tab pages from tabControl1  
        TabControl.TabPageCollection tabcoll = tabControl1.TabPages;  
      
        //get  windowToolStripMenuItem drop down menu items count  
        int n = windowToolStripMenuItem.DropDownItems.Count;  
      
        //remove all menu items from of windowToolStripMenuItem  
        for (int i = n - 1; i >=2; i--)  
        {  
            windowToolStripMenuItem.DropDownItems.RemoveAt(i);  
        }  
      
        //read each tabpage from tabcoll and add each tabpage text to windowToolStripMenuItem  
        foreach (TabPage tabpage in tabcoll)  
        {  
            //create Toolstripmenuitem  
            ToolStripMenuItem menuitem = new ToolStripMenuItem();  
            String s = tabpage.Text;  
            menuitem.Text = s;  
      
            if (tabControl1.SelectedTab == tabpage)  
            {  
                menuitem.Checked = true;  
            }  
            else  
            {  
                menuitem.Checked = false;  
            }  
      
            //add menuitem to windowToolStripMenuItem  
            windowToolStripMenuItem.DropDownItems.Add(menuitem);  
      
            //add click events to each added menuitem  
            menuitem.Click += new System.EventHandler(WindowListEvent_Click);  
        }  
    }  
      
    private void WindowListEvent_Click(object sender, EventArgs e)  
    {  
        //casting ToolStripMenuItem to ToolStripItem  
        ToolStripItem toolstripitem = (ToolStripItem)sender;  
      
        //create collection of tabs of tabContro1  
        //check every tab text is equal to clicked menuitem then select the tab  
        TabControl.TabPageCollection tabcoll = tabControl1.TabPages;  
        foreach (TabPage tb in tabcoll)  
        {  
            if (toolstripitem.Text == tb.Text)  
            {  
                tabControl1.SelectedTab = tb;  
                //call UpdateWindowsList_WindowMenu() to perform changes on menuitems  
                UpdateWindowsList_WindowMenu();  
            }  
        }  
    }  

برای عملگرهای  Open ,New ,Close,Close all ,Exit , Close all Window  کد های زیر را که جداگانه آورده شده اند قرار دهید.

 NEW

    private void newToolStripMenuItem_Click(object sender, EventArgs e)  
    {  
        TabPage tabpage = new TabPage();  
        tabpage.Text = "Untitled " + count;  
        //add richtextbox to tabpage  
        RichTextBox richtextbox = new RichTextBox();  
        richtextbox.Dock = DockStyle.Fill;  
        tabpage.Controls.Add(richtextbox);  
      
        tabControl1.TabPages.Add(tabpage);  
        tabControl1.SelectedTab = tabpage;  
      
        count++;  
      
        //call windows list function  
        UpdateWindowsList_WindowMenu();  
    }  

Open

    private void openToolStripMenuItem_Click(object sender, EventArgs e)  
    {  
        TabPage tabpage = new TabPage();  
        //add richtextbox to tabpage  
        RichTextBox richtextbox = new RichTextBox();  
        richtextbox.Dock = DockStyle.Fill;  
        tabpage.Controls.Add(richtextbox);  
      
        //read file using OpenFileDialog  
        OpenFileDialog openfilediag = new OpenFileDialog();  
        openfilediag.Filter = "All files|*.*";  
      
        if(openfilediag.ShowDialog()==DialogResult.OK)  
        {  
            richtextbox.Text = File.ReadAllText(openfilediag.FileName);  
      
            String filename = openfilediag.FileName.Substring(openfilediag.FileName.LastIndexOf("\\") + 1);  
      
            tabpage.Text = filename;  
            tabControl1.TabPages.Add(tabpage);  
            tabControl1.SelectedTab = tabpage;  
        }  
        //call windows list function  
        UpdateWindowsList_WindowMenu();  
    }  

Close

    private void closeToolStripMenuItem_Click(object sender, EventArgs e)  
    {  
        if(tabControl1.TabCount>0)  
        {  
            tabControl1.TabPages.Remove(tabControl1.SelectedTab);  
      
            //call windows list function  
            UpdateWindowsList_WindowMenu();  
        }  
    }  

Close All

    private void closeAllToolStripMenuItem_Click(object sender, EventArgs e)  
    {  
        tabControl1.TabPages.Clear();  
    }  

Exit

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)  
    {  
        Application.Exit();  
    }  

Close All Window

    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)  
    {  
        //call windows list function  
        UpdateWindowsList_WindowMenu();  
    }  

 کد کامل شده به صورت زیر می باشد :

    using System;  
    using System.Collections.Generic;  
    using System.ComponentModel;  
    using System.Data;  
    using System.IO;  
    using System.Drawing;  
    using System.Windows.Forms;  
      
    namespace WindowsListOfTabs  
    {  
        public partial class Form1 : Form  
        {  
            public Form1()  
            {  
                InitializeComponent();  
            }  
      
            //*************************************************************************************  
            // Update windows list to Window menu  
            //*************************************************************************************  
            public void UpdateWindowsList_WindowMenu()  
            {  
                //get all tab pages from tabControl1  
                TabControl.TabPageCollection tabcoll = tabControl1.TabPages;  
      
                //get  windowToolStripMenuItem drop down menu items count  
                int n = windowToolStripMenuItem.DropDownItems.Count;  
      
                //remove all menu items from of windowToolStripMenuItem  
                for (int i = n - 1; i >=2; i--)  
                {  
                    windowToolStripMenuItem.DropDownItems.RemoveAt(i);  
                }  
      
                //read each tabpage from tabcoll and add each tabpage text to windowToolStripMenuItem  
                foreach (TabPage tabpage in tabcoll)  
                {  
                    //create Toolstripmenuitem  
                    ToolStripMenuItem menuitem = new ToolStripMenuItem();  
                    String s = tabpage.Text;  
                    menuitem.Text = s;  
      
                    if (tabControl1.SelectedTab == tabpage)  
                    {  
                        menuitem.Checked = true;  
                    }  
                    else  
                    {  
                        menuitem.Checked = false;  
                    }  
      
                    //add menuitem to windowToolStripMenuItem  
                    windowToolStripMenuItem.DropDownItems.Add(menuitem);  
      
                    //add click events to each added menuitem  
                    menuitem.Click += new System.EventHandler(WindowListEvent_Click);  
                }  
            }  
      
            private void WindowListEvent_Click(object sender, EventArgs e)  
            {  
                //casting ToolStripMenuItem to ToolStripItem  
                ToolStripItem toolstripitem = (ToolStripItem)sender;  
      
                //create collection of tabs of tabContro1  
                //check every tab text is equal to clicked menuitem then select the tab  
                TabControl.TabPageCollection tabcoll = tabControl1.TabPages;  
                foreach (TabPage tb in tabcoll)  
                {  
                    if (toolstripitem.Text == tb.Text)  
                    {  
                        tabControl1.SelectedTab = tb;  
                        //call UpdateWindowsList_WindowMenu() to perform changes on menuitems  
                        UpdateWindowsList_WindowMenu();  
                    }  
                }  
            }  
      
      
            public static int count = 1;  
      
            //Form1 Load  
            private void Form1_Load(object sender, EventArgs e)  
            {  
                UpdateWindowsList_WindowMenu();  
            }  
      
      
            //  File -> New  
            private void newToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                TabPage tabpage = new TabPage();  
                tabpage.Text = "Untitled " + count;  
                //add richtextbox to tabpage  
                RichTextBox richtextbox = new RichTextBox();  
                richtextbox.Dock = DockStyle.Fill;  
                tabpage.Controls.Add(richtextbox);  
      
                tabControl1.TabPages.Add(tabpage);  
                tabControl1.SelectedTab = tabpage;  
      
                count++;  
      
                //call windows list function  
                UpdateWindowsList_WindowMenu();  
            }  
      
      
            //  File -> Open  
            private void openToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                TabPage tabpage = new TabPage();  
                //add richtextbox to tabpage  
                RichTextBox richtextbox = new RichTextBox();  
                richtextbox.Dock = DockStyle.Fill;  
                tabpage.Controls.Add(richtextbox);  
      
                //read file using OpenFileDialog  
                OpenFileDialog openfilediag = new OpenFileDialog();  
                openfilediag.Filter = "All files|*.*";  
      
                if(openfilediag.ShowDialog()==DialogResult.OK)  
                {  
                    richtextbox.Text = File.ReadAllText(openfilediag.FileName);  
      
                    String filename = openfilediag.FileName.Substring(openfilediag.FileName.LastIndexOf("\\") + 1);  
      
                    tabpage.Text = filename;  
                    tabControl1.TabPages.Add(tabpage);  
                    tabControl1.SelectedTab = tabpage;  
                }  
                //call windows list function  
                UpdateWindowsList_WindowMenu();  
            }  
      
      
            //  File -> Close  
            private void closeToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                if(tabControl1.TabCount>0)  
                {  
                    tabControl1.TabPages.Remove(tabControl1.SelectedTab);  
      
                    //call windows list function  
                    UpdateWindowsList_WindowMenu();  
                }  
            }  
      
            //  File -> Close All  
            private void closeAllToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                tabControl1.TabPages.Clear();  
            }  
      
      
            //  File -> Exit  
            private void exitToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                Application.Exit();  
            }  
      
      
            //  tabControl1 Selected Index Changed  
            private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)  
            {  
                //call windows list function  
                UpdateWindowsList_WindowMenu();  
            }  
      
      
            //  Window -> Close All Windows  
            private void closeAllWindowsToolStripMenuItem_Click(object sender, EventArgs e)  
            {  
                tabControl1.TabPages.Clear();  
            }  
        }  
    } 

نتیجه به صورت زیر می باشد :

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 4 تشکر

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید