我正在做一个模拟经营业务方面的课程项目。在主窗体上,用户可以单击一个按钮,将模拟向前移动一个月。在一个单独的表单上,用户可以做一些基本的事情,比如设置某些商品的销售额。这些销售应该在用户前进一个月后结束,但如果不打开该表单,我无法撤消销售。这引发了许多问题。有人可以解释一种方法,我可以以与主窗体不同的形式运行方法吗?
我尝试将方法公开并继续,
InventoryForm.checkSales();
但它没有看到 checkSales。
我正在做一个模拟经营业务方面的课程项目。在主窗体上,用户可以单击一个按钮,将模拟向前移动一个月。在一个单独的表单上,用户可以做一些基本的事情,比如设置某些商品的销售额。这些销售应该在用户前进一个月后结束,但如果不打开该表单,我无法撤消销售。这引发了许多问题。有人可以解释一种方法,我可以以与主窗体不同的形式运行方法吗?
我尝试将方法公开并继续,
InventoryForm.checkSales();
但它没有看到 checkSales。
暗示这是 windows 形式
暗示这是你的程序的结构方式
只要这些类在同一个命名空间中,它们就应该对彼此可见。
如果您有两种这样声明的表格:
并且您想从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);
}
将 checkSales 方法声明为静态
Public static void checkSales() ...