[英]Make methods on added form visible to main form
我正在研究一個類項目,該類項目可以模擬經營業務的各個方面。 在主窗體上,用戶可以單擊將模擬向前移動一個月的按鈕。 在單獨的表單上,用戶可以執行一些基本操作,例如對某些商品進行銷售。 當用戶向前移動一個月時,這些銷售應結束,但是如果不打開該表格,我將無法撤消銷售。 這引發了許多問題。 有人可以解釋一種方法,讓我可以用與主窗體不同的窗體來運行方法嗎?
我試圖將這種方法公開化,
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() ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.