簡體   English   中英

使添加表單上的方法對主表單可見

[英]Make methods on added form visible to main form

我正在研究一個類項目,該類項目可以模擬經營業務的各個方面。 在主窗體上,用戶可以單擊將模擬向前移動一個月的按鈕。 在單獨的表單上,用戶可以執行一些基本操作,例如對某些商品進行銷售。 當用戶向前移動一個月時,這些銷售應結束,但是如果不打開該表格,我將無法撤消銷售。 這引發了許多問題。 有人可以解釋一種方法,讓我可以用與主窗體不同的窗體來運行方法嗎?

我試圖將這種方法公開化,

InventoryForm.checkSales();

但它看不到checkSales。

暗示這是Windows窗體
暗示這就是程序的結構方式

只要這些類在相同的名稱空間中 ,它們就應該彼此可見。

如果您有兩個這樣聲明的形式:

  • 表格1
  • 表格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);
}

將checkSales方法聲明為靜態

  Public static void checkSales() ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM