根据之前的动作确定按钮功能

本文关键字:按钮 功能 | 更新日期: 2023-09-27 18:10:27

我有一个带有四个面板的Win Form,其中每个面板只能单独看到,就好像它们是独立的窗体一样,所以我创建了一个函数来控制它。

  public void panelView(int pw)
 {
   if (pw == 1)
  {
  panelMenu.Visible == true;     /*panelMenu - this is the main menu*/
  panel2.Visible == false;       /*panel2 - has a textBox and an "OK" button*/
  panel3.Visible == false;       /*panel3 - is where you see a product details*/
  panel4.Visible == false;       /*panel4 - is where you see products within a order*/
  }
   if (pw == 2)
  {      
  panelMenu.Visible == false;
  panel2.Visible == true;
  panel3.Visible == false;
  panel4.Visible == false;
  }
   if (pw == 3)
  {      
  panelMenu.Visible == false;
  panel2.Visible == false;
  panel3.Visible == true;
  panel4.Visible == false;
  }
   if (pw == 4)
  {      
  panelMenu.Visible == false;
  panel2.Visible == false;
  panel3.Visible == false;
  panel4.Visible == true;
  }
}
  private void btnCheck_Click(object sender, EventArgs e)
   {
     panelView(2);
   }
  private void btnOrder_Click(object sender, EventArgs e)
   {
     panelView(2);
   }

所以当我点击"btnCheck"时,它会转到"panel2",在那里我可以输入产品代码,然后我按"OK",这将向服务器发送一条消息,请求该特定产品的产品详细信息,并在"panel3"上显示所有产品详细信息。

如果我决定检查订单中的项目,而不是按"btnCheck",我会按"btnOrder",这也会导致"panel2",我将输入订单代码,但当我按"OK",这一次我想要它有一个不同的功能,而不是它请求服务器输入"panel2"的代码的产品详细信息,它会请求在订单中的所有项目对应于"panel2"上输入的订单代码。那么该信息将显示在"panel4"上。

我只是不知道如何让"panel2"知道我点击了"panelMenu",所以"OK"按钮可以选择文本框。输入文本并执行在"panelMenu"中选择的任务。帮助吗?

根据之前的动作确定按钮功能

一种可能的解决方案是向panelView方法传递一个额外的参数,该参数指示您希望特定面板显示的状态。如果面板2只有两种可能的状态,这可以是int或boolean,但如果最终每个面板有多个状态,你最好定义某种状态枚举。

例如:

public void panelView(int pw, int state)
{
    switch (pw)
    {
        case 1:
            // stuff
            break;
        case 2: 
            if (state == 1) // Check
            {
                // check setup code
            }
            else // Order
            {
                // order setup code
            }
            break;
        case 3:
        // stuff
        break; 
        // etc. etc.
    }
}

所以,当从btnCheck调用时你可以这样做:

panelView(2, 1);

. .and when from btnOrder:

panelView(2, 2);

我强烈建议你让状态更容易读,但如果你不打算使用枚举也许你可以定义一些常量,让你传递的东西更容易读:

int OrderState = 2;
int CheckState = 1;
panelView(2, OrderState)

如果你在面板上有公共属性,你可以设置标志,然后根据指定的状态控制它们的行为