开发者

Is there any way to group similar handlers for stripMenuItems?

I have a simple bitmap editor for small monochrome bitmaps. And I have a menus which allows to choose thickness of the pen and robber. The problem is that I don't like the following code. Is there any way to make it more compact?

    private void toolStripMenuItem4_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 3;
    }

    private void toolStripMenuItem3_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 2;
    }

    private void toolStripMenuItem2_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 1;
    }

    private void toolStripMenuItem5_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 4;
    }

    private void toolStripMenuItem6_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 5;
    }

    private void toolStripMenuItem7_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 6;
    }

    private void toolStripMenuItem8_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 7;
    }

    private void toolStripMenuItem9_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 8;
    }

    private void toolStripButton3_Click_1(object sender, EventArgs e)
    {
        CurrentPanel.EditMode = EditMode.Clear;
    }

    private void toolStripDropDownButton2_Click(object sender, EventArgs e)
    {
        CurrentPanel.EditMode = EditMode.FreeHand;
    }

    private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e)
    {
        CurrentPanel.EditMode = EditMode.Clear;
    }

    private void toolStripMenuItem10_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 1;
    }

    private void toolStripMenuItem11_Click(object sender, EventA开发者_高级运维rgs e)
    {
        CurrentPanel.RobberThickness = 2;
    }

    private void toolStripMenuItem12_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 3;
    }

    private void toolStripMenuItem13_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 4;
    }

    private void toolStripMenuItem14_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 5;
    }

    private void toolStripMenuItem15_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 6;
    }

    private void toolStripMenuItem16_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 7;
    }

    private void toolStripMenuItem17_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 8;
    }

    private void toolStripMenuItem18_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 16;
    }

    private void toolStripMenuItem19_Click(object sender, EventArgs e)
    {
        CurrentPanel.RobberThickness = 32;
    }

    private void toolStripMenuItem21_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 32;
    }

    private void toolStripMenuItem20_Click(object sender, EventArgs e)
    {
        CurrentPanel.PenThickness = 16;
    }


private void toolStripMenuItemCommon_Click(object sender, EventArgs e)
{

     ToolStripMenuItem item = (ToolStripMenuItem) sender;
     int thickness = (int)item.Tag;

     CurrentPanel.PenThickness = thickness ;
}

Of course you need to initialize Tag of each ToolStripMenuItem and set toolStripMenuItemCommon_Click as a handler for Click event. You can do it in a for cycle for example:

for(int i = 1; i < 8; i++)
{
    ToolStripMenuItem item = new ToolStripMenuItem();
    item.Text = "Set thickness: " + i;
    item.Click += toolStripMenuItemCommon_Click;
    item.Tag = i;

    // add item to strip container
}


Yes, there is:

private void SetPenThickness(int thickness)
{
    CurrentPanel.PenThickness = thickness;
}

toolStripMenuItem1.Click += (s,e) => SetPenThickness(1);
toolStripMenuItem2.Click += (s,e) => SetPenThickness(2);
toolStripMenuItem3.Click += (s,e) => SetPenThickness(3);
toolStripMenuItem4.Click += (s,e) => SetPenThickness(4);
// ...


Try this:

private void toolStripMenuItem_Click(object sender, EventArgs e)    
{        
     ToolStripMenuItem toolStripMenuItem = (ToolStripMenuItem) sender;

     switch (toolStripMenuItem.ID)
     {
         case "toolStripMenuItem4":
         {
              CurrentPanel.PenThickness = 3;    
              break;
         }
         ..........
         ..........
     }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜