2013-04-18 54 views
1

我正在研究模擬運行業務方面的類項目。在主窗體上,用戶可以單擊一個按鈕,將仿真向前移動一個月。在一個單獨的表格中,用戶可以做某些基本的事情,比如在某些商品上設置銷售。當用戶向前推進一個月時,這些銷售應該結束,但如果不打開該表單,我無法撤銷銷售。這引發了許多問題。有人可以解釋一種方法,我可以在主窗體的單獨窗體中運行一個方法嗎?使添加表單上的方法對主表單可見

我試圖使該方法public中去,

InventoryForm.checkSales(); 

但它不會看到checkSales。

+1

您需要發佈您的代碼。描述代碼並不特別有用。 –

+0

「這引發了很多問題。」所以我們有一些代碼並告訴我們什麼問題。 – Bit

+0

什麼樣的表格? Web窗體? –

回答

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

聲明checkSales方法靜態

Public static void checkSales() ...