【问题标题】:Re-Enabling Button Based on Condition (C#)根据条件重新启用按钮 (C#)
【发布时间】:2018-10-06 00:59:41
【问题描述】:

我想做的很简单(我当然无法弄清楚)。我正在制作一个带有 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") 将变灰且无法使用,这是目标,但一旦再次添加库存,此按钮仍然无法使用。有人可以解释我如何重新启用此按钮(即使我在“其他”条件下说过)?

【问题讨论】:

  • 您必须在其他地方查询数据库才能重新启用该按钮。就像一个注释一样,除非它被启用,否则您不能单击按钮,因此将 Enabled 设置为 true 不会执行任何操作,它必须为 true 才能运行该代码。
  • 该代码(与显示的完全相同)将无法编译,因为它缺少左括号和右括号...假设此代码在“button7”的单击事件处理程序中运行,则启用状态只会单击按钮时更改。正如@Ron 提到的,它在禁用时不会运行,所以它永远不会发生。
  • 您应该在向库存添加数量的地方启用按钮。

标签: c# winforms


【解决方案1】:

Ron 和 Heretic 的 cmets 是对的。一旦“禁用”,您将无法访问 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);  
 ...

【讨论】:

    【解决方案2】:

    此代码将允许无限次数的减法。因此,您将需要一个控件,当您低于零时停止减法。

    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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您希望每次更改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);
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        你需要移动这个:

         if (InvStrawberry <= 0) {
            button7.Enabled = false;
          } else {
            button7.Enabled = true;
          }
        

        到一个将定期检查它的 Updae 方法或循环,现在它在你的点击中,因此一旦它被禁用就永远不会被调用以再次启用它,因为那时你不能点击它。

        另外,假设您有两个变量,numberStrawberries 代表您的剩余库存,lot 代表您购买的四个草莓...

        if(numberStrawberries >= lot){
        //we have strawberries, and more at least 4 or more
        numberStrawberries-=lot;
        }else if(numberStrawberries!=0 && numberStrawberries < lot){ 
        //we have strawberries but only (remaining)
        
        //how many were short(how many we have is still in numberStrawberries)
         int short = lot- numberStrawberries;
        
        numberStrawberries=0;
        
        }else{
        //all out of strawberries
        }
        

        【讨论】:

          猜你喜欢
          • 2019-02-27
          • 2015-08-24
          • 1970-01-01
          • 1970-01-01
          • 2021-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多