۱۳

Menu، ToolBar و StatusBar 🎛️

یاد می‌گیریم چطور منو، نوار ابزار و نوار وضعیت به فرممون اضافه کنیم!

MenuStrip: ایجاد منوی حرفه‌ای

MenuStrip یکی از مهم‌ترین کنترل‌های Windows Forms هست که بهمون اجازه می‌ده منوی حرفه‌ای مثل File، Edit، View و... بسازیم. هر منو می‌تونه زیرمنو داشته باشه و هر آیتم می‌تونه یه عمل خاص انجام بده.

// اضافه کردن MenuStrip به فرم
public partial class Form1 : Form
{
    private MenuStrip menuStrip;
    private ToolStripMenuItem fileMenu;
    private ToolStripMenuItem editMenu;
    
    public Form1()
    {
        InitializeComponent();
        CreateMenu();
    }
    
    private void CreateMenu()
    {
        // ایجاد MenuStrip
        menuStrip = new MenuStrip();
        
        // ایجاد منوی File
        fileMenu = new ToolStripMenuItem("فایل");
        fileMenu.DropDownItems.Add("جدید", null, NewFile_Click);
        fileMenu.DropDownItems.Add("باز کردن", null, OpenFile_Click);
        fileMenu.DropDownItems.Add("-"); // جداکننده
        fileMenu.DropDownItems.Add("خروج", null, Exit_Click);
        
        // اضافه کردن منوها به MenuStrip
        menuStrip.Items.Add(fileMenu);
        
        // اضافه کردن MenuStrip به فرم
        this.MainMenuStrip = menuStrip;
        this.Controls.Add(menuStrip);
    }
}

ToolStrip: نوار ابزار قدرتمند

ToolStrip برای ایجاد نوار ابزار استفاده می‌شه. می‌تونیم دکمه‌ها، ComboBox، TextBox و حتی Separator اضافه کنیم. معمولاً زیر منو قرار می‌گیره و دسترسی سریع به عملکردهای مهم رو فراهم می‌کنه.

private void CreateToolBar()
{
    ToolStrip toolStrip = new ToolStrip();
    
    // دکمه جدید
    ToolStripButton newButton = new ToolStripButton();
    newButton.Text = "جدید";
    newButton.Image = Properties.Resources.NewIcon; // آیکون
    newButton.Click += NewFile_Click;
    
    // دکمه ذخیره
    ToolStripButton saveButton = new ToolStripButton();
    saveButton.Text = "ذخیره";
    saveButton.Image = Properties.Resources.SaveIcon;
    saveButton.Click += SaveFile_Click;
    
    // جداکننده
    ToolStripSeparator separator = new ToolStripSeparator();
    
    // ComboBox برای انتخاب فونت
    ToolStripComboBox fontCombo = new ToolStripComboBox();
    fontCombo.Items.AddRange(new string[] { "Arial", "Tahoma", "Vazir" });
    fontCombo.SelectedIndexChanged += FontCombo_Changed;
    
    // اضافه کردن آیتم‌ها به ToolStrip
    toolStrip.Items.AddRange(new ToolStripItem[] {
        newButton, saveButton, separator, fontCombo
    });
    
    this.Controls.Add(toolStrip);
}

StatusStrip: نوار وضعیت اطلاع‌رسان

StatusStrip معمولاً در پایین فرم قرار می‌گیره و اطلاعات مفیدی مثل وضعیت برنامه، تاریخ و ساعت، یا پیام‌های راهنما نمایش می‌ده. می‌تونه شامل Label، ProgressBar و حتی دکمه باشه.

private void CreateStatusBar()
{
    StatusStrip statusStrip = new StatusStrip();
    
    // برچسب وضعیت
    ToolStripStatusLabel statusLabel = new ToolStripStatusLabel();
    statusLabel.Text = "آماده";
    statusLabel.Spring = true; // فضای اضافی رو پر می‌کنه
    
    // نوار پیشرفت
    ToolStripProgressBar progressBar = new ToolStripProgressBar();
    progressBar.Value = 50;
    progressBar.Visible = false;
    
    // برچسب تاریخ و ساعت
    ToolStripStatusLabel dateTimeLabel = new ToolStripStatusLabel();
    dateTimeLabel.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm");
    
    // اضافه کردن آیتم‌ها به StatusStrip
    statusStrip.Items.AddRange(new ToolStripItem[] {
        statusLabel, progressBar, dateTimeLabel
    });
    
    this.Controls.Add(statusStrip);
    
    // بروزرسانی ساعت هر ثانیه
    Timer timer = new Timer();
    timer.Interval = 1000;
    timer.Tick += (s, e) => {
        dateTimeLabel.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
    };
    timer.Start();
}

تمرین! 🧠

یه فرم بساز که شامل MenuStrip، ToolStrip و StatusStrip باشه. منو باید شامل "فایل" و "ویرایش" باشه. نوار ابزار باید دکمه‌های "جدید"، "باز کردن" و "ذخیره" داشته باشه. نوار وضعیت هم باید تاریخ و ساعت جاری رو نمایش بده.

جواب تمرین

public partial class Form1 : Form
{
    private StatusStrip statusStrip;
    private ToolStripStatusLabel dateTimeLabel;
    
    public Form1()
    {
        InitializeComponent();
        CreateMenuAndToolbars();
        StartTimer();
    }
    
    private void CreateMenuAndToolbars()
    {
        // ایجاد MenuStrip
        MenuStrip menuStrip = new MenuStrip();
        
        // منوی فایل
        ToolStripMenuItem fileMenu = new ToolStripMenuItem("فایل");
        fileMenu.DropDownItems.Add("جدید", null, (s, e) => NewFile());
        fileMenu.DropDownItems.Add("باز کردن", null, (s, e) => OpenFile());
        fileMenu.DropDownItems.Add("ذخیره", null, (s, e) => SaveFile());
        
        // منوی ویرایش
        ToolStripMenuItem editMenu = new ToolStripMenuItem("ویرایش");
        editMenu.DropDownItems.Add("کپی", null, (s, e) => Copy());
        editMenu.DropDownItems.Add("چسباندن", null, (s, e) => Paste());
        
        menuStrip.Items.AddRange(new ToolStripItem[] { fileMenu, editMenu });
        
        // ایجاد ToolStrip
        ToolStrip toolStrip = new ToolStrip();
        toolStrip.Items.Add("جدید", null, (s, e) => NewFile());
        toolStrip.Items.Add("باز کردن", null, (s, e) => OpenFile());
        toolStrip.Items.Add("ذخیره", null, (s, e) => SaveFile());
        
        // ایجاد StatusStrip
        statusStrip = new StatusStrip();
        dateTimeLabel = new ToolStripStatusLabel();
        statusStrip.Items.Add(dateTimeLabel);
        
        // اضافه کردن به فرم
        this.MainMenuStrip = menuStrip;
        this.Controls.Add(menuStrip);
        this.Controls.Add(toolStrip);
        this.Controls.Add(statusStrip);
    }
    
    private void StartTimer()
    {
        Timer timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += (s, e) => {
            dateTimeLabel.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
        };
        timer.Start();
    }
    
    private void NewFile() => MessageBox.Show("فایل جدید ایجاد شد!");
    private void OpenFile() => MessageBox.Show("فایل باز شد!");
    private void SaveFile() => MessageBox.Show("فایل ذخیره شد!");
    private void Copy() => MessageBox.Show("کپی شد!");
    private void Paste() => MessageBox.Show("چسبانده شد!");
}