【问题标题】:Show and hide buttons as soon as counters increases or decreases?计数器增加或减少时立即显示和隐藏按钮?
【发布时间】:2016-04-30 13:36:09
【问题描述】:

它是这样的,我有一个 numericUpDown 最大值为 4。我想这样做,如果值为 1,则只出现一个按钮,如果值为 2,则出现两个按钮,等等。我怎么能设法在代码中做到这一点?我正在使用一个计时器,并且在每次滴答时它都会检查 numericUpDown 的值是否发生变化,如果它发生变化,它会添加按钮,但是如果值减小,我该如何做相反的事情,删除按钮?例如,如果我的值为 4,并且如果我用 ONE 减小,我已经出现了 4 个按钮,那么只有一个按钮应该消失。我该怎么做?

private void timer1_Tick(object sender, EventArgs e)
    {
        if (numericUpDown1.Value == 1)
        {
            metroComboBox3.Show();
        }
        else if (numericUpDown1.Value == 2)
        {
            metroComboBox4.Show();
        }
    }

【问题讨论】:

  • 当您说 numericUpDown 减少 1 并且一个按钮消失时,您的意思是:如果 numericUpDown 从 4 减少到 3 则 button4 消失或 button1 消失?
  • NumericUpDown.ValueChanged Event代替定时器。

标签: c# windows forms


【解决方案1】:

在设计中只需双击你的 numericUpDown,你不需要计时器。

你会得到private void numericUpDown1_ValueChanged

您的代码应该如下所示:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown1.Value == 1)
            {
                metroComboBox3.Show();
            }
            else if (numericUpDown1.Value == 2)
            {
                metroComboBox4.Show();
            }
        }

【讨论】:

    【解决方案2】:

    如果你必须用计时器来做,那么这是要走的路:

    private void timer1_Tick(object sender, EventArgs e)
    {
        var buttons = new [] { button1, button2, button3, button4, };
        for (var i = 0; i < buttons.Length; i++)
        {
            buttons[i].Visible = numericUpDown1.Value - 1 >= i
        }
    } 
    

    但我会使用numericUpDown1.ValueChanged 事件并这样做:

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        var buttons = new [] { button1, button2, button3, button4, };
        for (var i = 0; i < buttons.Length; i++)
        {
            buttons[i].Visible = numericUpDown1.Value - 1 >= i
        }
    }
    

    【讨论】:

    • 基于该问题,使用计时器检查数字上/下值的理由为零。我意识到它是为了完整性而包含在内的,但我不想看到年轻的开发人员看到这个答案并认为使用计时器是一条合适的前进道路。
    • @MetroSmurf - 我完全同意。我确实尝试用“如果你必须”和“但我会使用”的措辞来传达这个信息。
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多