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

本文关键字:表单 添加 方法 | 更新日期: 2023-09-27 18:09:51

我正在做一个模拟经营企业的课程项目。在主表单上,用户可以单击一个按钮,将模拟向前移动一个月。在一个单独的表单上,用户可以做一些基本的事情,比如为某些商品设置销售。当用户向前移动一个月时,这些销售应该结束,但是如果不打开该表单,我无法撤消销售。这引发了许多问题。有人能解释一种方式,我可以运行一个方法在单独的形式从主要形式?

我试着把方法设为公共的,然后,

InventoryForm.checkSales();

但是它没有看到checkSales

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

暗示这是windows窗体
暗示这是你的程序的结构方式

类应该是相互可见的,只要它们在同一个命名空间。

如果你有两个这样声明的表单:

  • Form1
  • Form2

你想从Form2访问一个在Form1中声明的方法,你要么必须创建一个Form1的新实例,要么确保你的方法是静态的(通常是不好的做法,但它发生了,例如数学课),这样你就可以用类名访问它。您也可以创建一个事件,并以另一种形式订阅它。

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

将checkSales方法声明为静态

  Public static void checkSales() ...