ایجاد لیستی از 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 تشکر