ایجاد لیستی از tab ها در منو با استفاده از #C
سه شنبه 22 دی 1394به هر ویرایشگر متنی که نگاه کنید ، یک منو Window دارد که لیستی از tab ها را نشان می دهد . پس این منو Window در هر ویراشگری برای مدیریت لیستی از tab ها اهمیت دارد. همچنین برای تغییر یک Tab براحتی می توانید از منو Window استفاده کنید.
به هر ویرایشگر متنی که نگاه کنید ، یک منو 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(); } } }
نتیجه به صورت زیر می باشد :
- C#.net
- 2k بازدید
- 4 تشکر