根据条件重新启用按钮(C#)

时间:2018-10-06 00:59:42

标签: c# winforms

我想做的事情很简单(我当然无法解决)。我正在使用Winform App格式的库存系统制作一个样本商店,如果在客户端单击“下订单”按钮,它将从库存中扣除;扣除的金额取决于所订购物品的数量。无论如何,使用此代码

private void button7_Click(object sender, EventArgs e)

button7.Enabled = true;
//Read in value
int qty = Convert.ToInt32(nudQuantity.Value);
if ((rdoSmallCup.Checked & rdoStraw.Checked) == true) {

  //Removing four from inventory for strawberry after an order is made
  InvStrawberry = InvStrawberry - (4 * qty);
  if (InvStrawberry <= 0) {
    button7.Enabled = false;
  } else {
    button7.Enabled = true;
  }

  label17.Text = Convert.ToString(InvStrawberry);  

我看到,一旦草莓库存下降到零以上(它实际上是一个负值,我不希望看到,但又是另一个问题),它的编译就不会出错,但是有一个下单按钮(“目标是按钮7“)变灰且无法使用,但这是目标,但是一旦再次添加广告资源,该按钮仍然无法使用。有人可以解释一下如何重新启用此按钮(即使我说的是“ else”状态)?

4 个答案:

答案 0 :(得分:0)

Ron和Heretic的评论是正确的。一旦“禁用”按钮,您将无法访问Button7单击事件处理程序中的代码。再次启用它的唯一方法是从外部逻辑中说,例如,在将其他项目添加到清单中之后,可以立即启用该按钮。 您也可以简化一下:

private void button7_Click(object sender, EventArgs e)

   //Read in value
   int qty = Convert.ToInt32(nudQuantity.Value);
   if ((rdoSmallCup.Checked & rdoStraw.Checked) == true) {

   //Removing four from inventory for strawberry after an order is made
   InvStrawberry = InvStrawberry - (4 * qty);
   if (InvStrawberry <= 0) 
     button7.Enabled = false;

   label17.Text = Convert.ToString(InvStrawberry);  
 ...

答案 1 :(得分:0)

此代码将允许无数个减法。因此,您将需要一个控件,当您降至零以下时,该控件将停止减法。

private void button7_Click(object sender, EventArgs e){
    // I have no idea why you have enabled the button here, mate
    //Converting the quantity
    int qty = Convert.ToInt32(nudQuantity.Value);

    if((roSmallCup.Checked & rdoStraw.Checked) == true) {
        //triggers when the Inventory of strawberry is more than zero
        if( (InvStrawberry - (4 * qty)) > 0 ){
            InvStrawberry = InvStrawberry - (4 * qty);
        } else
        {
            button7.ENabled = false;
            MessageBox.Show("We are out of inventory,Sorry!");
        }
        label17.Text = Convert.ToString(InvStrawberry);
    }
}

答案 2 :(得分:0)

如果您希望每次更改InvStrawberry的值时按钮都可能更新,那么最好的选择是为InvStrawberry设置属性并在那里更新按钮的状态。这样可以减少在整个代码中需要使用的逻辑。

尝试一下:

public class StrawberryForm : Form
{
    private int _invStrawberry = 0;
    private int InvStrawberry
    {
        get
        {
            return _invStrawberry;
        }
        set
        {
            _invStrawberry = value;
            button7.Enabled = _invStrawberry > 0;
        }
    }

    private void button7_Click(object sender, EventArgs e)
    {
        int qty = Convert.ToInt32(nudQuantity.Value);
        if ((rdoSmallCup.Checked & rdoStraw.Checked) == true)
        {
            this.InvStrawberry -= 4 * qty;
            label17.Text = Convert.ToString(this.InvStrawberry);
        }
    }
}

答案 3 :(得分:-1)

您需要移动它:

    `[1, 27, 729, 512, 8, 512, 1, 8]
     [1, 27, 729, 512, 8, 512, 8, 1]
     [1, 27, 729, 512, 512, 1, 8, 8]
     [1, 27, 729, 512, 512, 8, 1, 8]
     [1, 27, 729, 512, 512, 8, 8, 1]
     [1, 64, 8, 64, 125, 512, 512, 512]
     [1, 64, 8, 64, 512, 125, 512, 512]
     [1, 64, 8, 64, 512, 512, 125, 512]
     [1, 64, 8, 64, 512, 512, 512, 125]
     [1, 64, 8, 125, 64, 512, 512, 512]`

一个Updae方法或循环,该方法或循环将在您单击时立即对其进行定期检查,因此一旦被禁用,将永远不会再次调用它以启用它,因为此时您无法单击它。

另外,假设您有两个变量, if (InvStrawberry <= 0) { button7.Enabled = false; } else { button7.Enabled = true; } 代表您的剩余库存,numberStrawberries代表您购买的四个草莓...

lot