使添加表单上的方法对主表单可见

时间:2013-04-18 22:34:19

标签: c#

我正在研究一个模拟经营企业方面的课程项目。在主窗体上,用户可以单击一个按钮,将模拟向前移动一个月。在单独的表单上,用户可以执行基本操作,例如在某些项目上设置销售。当用户向前移动一个月时,这些销售应该结束,但是如果不打开该表单,我就无法撤消销售。这引发了许多问题。有人可以解释一种方法,我可以在主窗体的单独形式中运行方法吗?

我尝试将该方法公之于众,

InventoryForm.checkSales();

但它没有看到checkSales。

2 个答案:

答案 0 :(得分:1)

暗示这是Windows表单
暗示这是您的计划结构的方式

只要这些类在同一个namespace中,它们就应该彼此可见。

如果你有两个声明的形式:

  • Form1中
  • 窗体2

并且您希望从Form2访问Form1中声明的方法,您要么必须创建Form1的新实例,要么确保您的方法是静态的(通常是不好的做法)但它发生在例如Math Class),因此您只能使用类名访问它。您还可以创建一个事件并以另一种形式订阅它。

// Option 1 : (New Instance)

public class Form2()
{
   Form2_Load(object sender, EventArgs e)
   { 
     // Create new instance of Form1
     Form1 form1 = new Form1();
     form1.MyForm1Method();
   }
} 

//Option 2 : (Static)
 public class Form2()
{
   Form2_Load(object sender, EventArgs e)
   { 
     // Method is static in Form1 (The class would be static too)
     Form1.MyForm1Method();
   }
} 

// Option 3 (Event Subscribtion)

//Form1:

private void StartForm2Button_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.SomethingHappened += Form2_SomethingHappened;
    form2.Show();
}

private Form2_SomethingHappened(object sender, EventArgs e)
{
    Form2 form2 = (Form2)sender;
    string data = form2.Data;
    // create node
    AddNode(node);
}


//Form2:

public event EventHandler SomethingHappened;

public string Data
{
   get { return textBoxData.Text; }
}

private void SomeButton_Click(object sender, EventArgs e)
{
    if (SomethingHappened != null)
        SomethingHappened(this, EventArgs.Empty);
}

答案 1 :(得分:-3)

将checkSales方法声明为静态

  Public static void checkSales() ...