MenuStrip İçindeki Nesnelerin Renklerini Ayarla - CSharp


MenuStrip bünyesinde bulunan nesnelerle tek tek işlem yapmak zahmetli ve uğraştırıcı olabiliyor. Bunun önüne geçebilmek için döngü ile MenuStrip nesnesi bünyesindeki nesnelere müdahale edilebilecek alternatif bir csharp kodu aşağıda verilmiştir.

Kod


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormuOnTanimliDegerlerleYenidenBoyutlandirCSharp
{
    public partial class AnaForm : Form
    {
        public AnaForm()
        {
            InitializeComponent();
        }

        //--------------------------------------------------
        //MenuStrip içindeki nesnelere 
        //ulaşabilmek için kullanılan metot.
        //--------------------------------------------------
        /// <summary>
        /// Recursively get SubMenu Items.Includes Separators.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private IEnumerable<ToolStripItem> GetItems(ToolStripItem item)
        {
            if (item is ToolStripMenuItem)
            {
                foreach (ToolStripItem tsi in (item as ToolStripMenuItem).DropDownItems)
                {
                    if (tsi is ToolStripMenuItem)
                    {
                        if ((tsi as ToolStripMenuItem).HasDropDownItems)
                        {
                            foreach (ToolStripItem subItem in GetItems((tsi as ToolStripMenuItem)))
                                yield return subItem;
                        }
                        yield return (tsi as ToolStripMenuItem);
                    }
                    else if (tsi is ToolStripSeparator)
                    {
                        yield return (tsi as ToolStripSeparator);
                    }
                }
            }
            else if (item is ToolStripSeparator)
            {
                yield return (item as ToolStripSeparator);
            }
        }

        //--------------------------------------------------
        //GetItems() metodu aracılığıyla 
        //nesneler üzerinde renk ayarı yap.
        //--------------------------------------------------
        void AracCubuklariTemaRenkAyarla()
        {
            List<ToolStripItem> allItems = new List<ToolStripItem>();
            foreach (ToolStripItem toolItem in menuStrip.Items)
            {
                allItems.Add(toolItem);
                //add sub items
                allItems.AddRange(GetItems(toolItem));
            }

            foreach (ToolStripItem toolItem in allItems)
            {
                if (toolItem is ToolStripMenuItem)
                {
                    ToolStripMenuItem tsmi = (toolItem as ToolStripMenuItem);
                    //Do something with it
                    tsmi.BackColor = Color.Yellow;
                    tsmi.ForeColor = Color.Blue;
                }
                else if (toolItem is ToolStripSeparator)
                {
                    ToolStripSeparator tss = (toolItem as ToolStripSeparator);

                    //Do something with it
                    tss.Paint += toolStripSeparator_Paint;
                }
            }
        }

        //--------------------------------------------------
        //ToolStripSeparator için renk ayarı yap.
        //--------------------------------------------------
        void toolStripSeparator_Paint(object sender, PaintEventArgs e)
        {
            ToolStripSeparator tss = (ToolStripSeparator)sender;

            e.Graphics.FillRectangle(new SolidBrush(Color.Green), 0, 0, tss.Width, tss.Height);
            e.Graphics.DrawLine(new Pen(Color.Gray), 30, tss.Height / 2, tss.Width - 4, tss.Height / 2);
        }

        //--------------------------------------------------
        //Form açıldığında renk ayarlarını uygula.
        //--------------------------------------------------
        private void AnaForm_Load(object sender, EventArgs e)
        {
            AracCubuklariTemaRenkAyarla();
        }
    }
}

Etiketler
csharp