【问题标题】:Use same code on another button在另一个按钮上使用相同的代码
【发布时间】:2013-08-09 19:23:12
【问题描述】:

我多次使用完全相同的代码,我认为只复制/粘贴所有内容会非常低效。有没有办法让我们说 button2 使用与 button1 完全相同的代码而不复制/粘贴所有内容?

我的一些代码非常大,这就是我问的原因。

例如,我知道这一点:

    private TabPage T
    {
        get { return (t.SelectedTab); }
    }

但是我不知道如何使它工作:(是的,有多种方法可以在我的应用程序中启用全屏模式)

        if (FormBorderStyle != FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Normal;
            WindowState = FormWindowState.Maximized;
            p1.BackColor = Color.White;
            p2.BackColor = Color.White;
            TopMost = true;
            c2.Visible = false;
            Wi.Visible = false;
            t1.Visible = false;
            F.Text = "Exit Full Screen";
            t2.Text = "Exit Full Screen";
        }
        else
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            if (Environment.OSVersion.Version.Build >= 7000)
            {
                if (DWM.DwmIsCompositionEnabled())
                {
                    Color c = Color.FromArgb(255, 221, 220, 220);
                    TransparencyKey = c;
                    p1.BackColor = c;
                    p2.BackColor = c;
                    MARGINS mr = new MARGINS();
                    mr.T = 1800;
                    IntPtr h = Handle;
                    int result = DwmExtendFrameIntoClientArea(h, ref mr);
                }
            }
            TopMost = false;
            Wi.Visible = true;
            t1.Visible = true;
            F.Text = "Full Screen";
            t2.Text = "Full Screen";
        }

【问题讨论】:

  • 您可以将代码移动到方法中。让按钮单击事件调用该方法。

标签: c# windows button text tabpage


【解决方案1】:

您还可以将代码放在一个单独的方法中,并在两个事件处理程序中调用该方法,这样就不会混淆它的作用和为谁。他们可以准确地看到哪个按钮调用了什么方法或代码。在这种情况下,它将是相同的方法。

【讨论】:

    【解决方案2】:

    只需对两个按钮应用相同的事件处理程序即可。这可以通过简单地在设计器的事件选项卡中键入方法的名称来完成,也可以通过在构造时手动添加事件处理程序来完成。

    在这种情况下,将方法名称也重构为对两个按钮都调用有意义的名称通常是个好主意。如果单击button2 触发button1_click,其他一些编码人员可能会感到困惑。如果两个按钮都触发 MakeFullscreen 方法,那么它就不会那么混乱了。

    【讨论】:

    • 我尝试使用这个:t2.Click += new System.EventHandler(this.f);但是该操作的执行速度明显变慢了?!?
    • 请注意,如果您将相同的事件处理程序分配给多个控件,设计器将搞砸,并且事件订阅将在将来的某个随机点丢失。此外,我不建议将事件处理程序重命名为使用非事件处理程序命名。一种更简洁的方法(导致更好的架构)是将业务逻辑移动到另一个方法中,然后从两个事件处理程序中调用它。
    • @JasonWilliams 如果您修改自动生成的设计器文件会导致问题。如果您使用设计器本身的 UI,并且它是事件菜单,那么不,它根本不会搞砸任何事情。至于您是否有两个事件处理程序调用一个方法与一个方法分配为两个事件的处理程序,这主要是一种约定。就我个人而言,我认为您描述的模式表明对事件处理程序的真正含义缺乏了解。这只是一种方法。它并不比任何其他方法更特别。 button1_click 在任何方面都没有特殊
    • @Servy:如果您使用表单设计器将两个控件分配给同一个事件处理程序,它在将来的某个时候丢失事件订阅。我在 VS 2005、2008、2010、2012 中看到了这一点(我喜欢为多个控件共享一个事件处理程序,但每次我这样做时,我都会在几周内被烧毁,因为订阅在进行另一次编辑后消失了表格)。至于破坏命名约定,我很惊讶您的代表会建议将共享业务逻辑直接放在事件处理程序中,而不是将其封装在共享方法中。
    • @JasonWilliams 至于订阅消失,我很少为此使用设计器,我倾向于明确订阅我的事件,所以我自己不会遇到这个问题,但我也从来没有听说它发生在任何人身上,我感到非常惊讶。如果您能够创建可重现的示例,我建议您向 VS 团队提交错误报告。至于其他评论,您的语句本身将事件处理程序与任何其他方法区分开来。 没有这种区别。事件处理程序只是方法,仅此而已。它们没有什么特别之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多