【问题标题】:Controlling order of commands using buttons使用按钮控制命令的顺序
【发布时间】:2014-06-03 09:47:48
【问题描述】:

在 Windows 窗体中,我有 Button1Button2Button3。这些按钮代表应按从开始操作到最终操作的顺序执行的一系列操作。所以通常我可以按如下方式处理。

Form1: Form
{

    Form_Load(Object sender, event Args e)
    {
        Button1.Enabled = true;
        Button2.Enabled = false;
        Button3.Enabled = false;
    }


    Button1_click(Object sender, event Args e)
    {
        //Actions
        Button2.Enabled = true;
        Button1.Enabled = false;
    }

    Button2_click(Object sender, event Args e)
    {
        //Actions
        Button3.Enabled = true;
        Button2.Enabled = false;
    }

    Button3_click(Object sender, e)
    {
        //Actions
        Button3.Enabled = false;
        Button1.Enabled = true;
    }
}

在几个地方我都是这样做的。这是标准方式吗?

编辑:

而且在一个简单的情况下,比如你应该在点击button2之前点击button1,上述方法是否可以接受?

【问题讨论】:

  • 制作按钮列表,将所有按钮添加到集合中,创建一个将所有按钮的“启用”属性设置为 false 的方法,并设置特定按钮(基于引用或简单的索引)启用为真。小菜一碟。如果你想扩展它,你可能想使用泛型来处理其中的一些,但对于这种情况,它是不必要的。
  • “标准”不适用。取决于您在做什么以及为什么要将这种僵化的行为强加给用户。你在做什么很好。您可以按照@BjarkeSøgaard 的建议重构它,但可能不值得这么麻烦。
  • 我认为您的方法没有问题,除非您还需要允许用户返回..
  • 我同意@DonBoitnott。没有“标准”的方式来做这种行为。有无穷无尽的可能性最终得到相同的结果。作为一个想法,我会将操作代码移动到自己的方法中,然后我会调用它来代替 //Actions

标签: c# .net winforms window command


【解决方案1】:

为了扩展 Bjarke 所说的内容,我提供了一个代码示例。

Form1: Form
{
    List<Button> listButtons = new List<Button>();

    public void EnableButton(Button btnToEnable)
    {
        foreach(Button btn in listButtons)
        {
            //check button name.
            //if it is the button to enable, enable it, if not then disable it
            btn.Enabled = btn.Name == btnToEnable.Name;
        }
    }

    Form_Load(Object sender, event Args e)
    {
        listButtons.Add(Button1);
        listButtons.Add(Button2);
        listButtons.Add(Button3);

        EnableButton(Button1);

        //Button1.Enabled = true;
        //Button2.Enabled = false;
        //Button3.Enabled = false;
    }


    Button1_click(Object sender, event Args e)
    {
        EnableButton(Button2);
        //Actions
        //Button2.Enabled = true;
        //Button1.Enabled = false;
    }

    Button2_click(Object sender, event Args e)
    {
        EnableButton(Button3);
        //Actions
        //Button3.Enabled = true;
        //Button2.Enabled = false;
    }

    Button3_click(Object sender, e)
    {
        EnableButton(Button1);
        //Actions
        //Button3.Enabled = false;
        //Button1.Enabled = true;
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2012-01-13
    • 2017-06-12
    相关资源
    最近更新 更多