优化重复

时间:2017-11-30 20:13:50

标签: c# winforms

我有一个小菜单条项目,我有很多按钮激活不同的形式。

一个按钮的代码是:

    Form B1 = new Form1();
    private void Button1_Click(object sender, EventArgs e)
        {
            if (B1.Visible == false)
            {
                B1 = new Form1();
            }

            B1.Visible = true;
            B1.Activate();
        }

我还有一个鼠标进入和离开事件:

  private void Button1_MouseEnter(object sender, EventArgs e)
    {
        Button1.Text = "Something prdy intriguing";
    }
    private void Button1_MouseLeave(object sender, EventArgs e)
    {
        Button1.Text = "Hi";
    }

一个工具提示:

private void Tooltips()
{
ToolTip forB1 = new ToolTip();
forB1.SetToolTip(button1, "21.11.17");
}

现在想象一下,我需要大约8个8个不同形式的按钮,这意味着我必须再次重复所有这些并获得收益,浪费时间并占用大量代码空间。

是否有可能压缩这些? 这是我的世界,我不确定从哪里开始优化。

3 个答案:

答案 0 :(得分:1)

一个选项是将所有这一切移动到一个功能:

public void AttachMenuStripButtonHandlers(
    Button btn, 
    Form form, 
    string enterText,
    string leaveText,
    string tooltip) {

    btn.Click += (sender, args) => {
        form.Visible = true;
        form.Activate();
    };
    btn.MouseEnter += (sender, args) => {
        btn.Text = enterText;
    };
    btn.MouseLeave += (sender, args) => {
        btn.Text = leaveText;
    };
    new ToolTip().SetToolTip(btn, tooltip);
}

对于每个按钮调用,这样:

AttachMenuStripButtonHandlers(Button1, B1, "on enter", "on leave", "tooltip");

答案 1 :(得分:0)

对于你问题的第二部分,你可以做这样的事情

private void Button_MouseEnter(object sender, EventArgs e)
{
    ((Button)sender).Text = "Something prdy intriguing";
}
private void Button_MouseLeave(object sender, EventArgs e)
{
    ((Button)sender).Text = "Hi";
}

您需要将相同的事件处理程序附加到所有按钮。

答案 2 :(得分:0)

所以我在这里偷了@Evk的代码,但基本上这就是我想要的方式。

public void ButtonHandlers(Type NewForm)
    {

            NewButton.Click += (sender, args) =>
            {
                Form TheNewMain = (Form)Activator.CreateInstance(NewForm);
                if (TheNewMain.ShowDialog() != DialogResult.Cancel)
                {
                    TheNewMain.Activate();
                }
            };

基本上我添加的不是获取Form我必须得到类型,因为我想要的是当一个表单是Visible时,它不会打开它两次,通过Evks代码打开它是的但是在关闭它的处置,它不能创建它的新实例。

在代码中,我只需要在typeof(formName)

中提出NewForm

谢谢Evk!