2011-10-11 122 views

回答

1

通常,當您想要更新主窗體時,您可以在該窗體上創建一個公共方法,並在具有新數據並可以將它們發送到主窗體時從另一窗體調用它。這不應該是一個問題。

請注意,如果要將數據發送到某處,則需要對該位置的引用,即您需要對其他表單中的主表單進行引用。無論是從主要形式傳遞this其他形式的構造函數,或者你也可以存儲在Program類(這樣做在Main方法,其中創建的主要形式)等

0

最OOP在靜態字段參考友好的解決方案可能是以任何形式「觸發」數據更新的事件,該數據更新由另一個表單的方法訂閱並處理。這裏有一個基本的線路:

public class Form1:Form 
{ 
    public event EventHandler<MyDataObject> DataChanged; 

    ... 

    public override void OnClosing(CancelEventArgs e) 
    { 
     //Put in logic to determine whether we should fire the DataChanged event 
     try 
     { 
     if(DataChanged != null) DataChanged(this, myFormCurrentData); 
     base.OnClosing(e); 
     } 
     catch(Exception ex) 
     { 
     //If any handlers failed, cancel closing the window until the errors 
     //are resolved. 
     MessageBox.Show(ex.Message, "Error While Saving", MessageBoxButtons.OK); 
     e.Cancel = true; 
     } 
    } 
} 

... 

public class Form2:Form 
{ 
    //Called from wherever you would open Form1 from Form2 
    public void LaunchForm1() 
    { 
     var form1 = new Form1(); 
     form1.DataChanged += HandleDataChange; 
     form1.Show(); 
    } 

    private void HandleDataChange(object sender, MyDataObject dataObj) 
    { 
     //Do your data validation or persistence in this method; if it fails, 
     //throw a descriptive exception, which will prevent Form1 from closing. 
    } 
} 

你不必使用一個事件;也可以使用一個簡單的委託,它可以做幾乎相同的事情,同時也可以在表單的構造函數中指定(因此需要提供處理函數)。

0

您可以從另一種形式更新以某種形式的數值做這樣的事......

表2碼

public event EventHandler<UpdatedEventArgs> updateEvent; 

    public class UpdatedEventArgs : EventArgs 
    { 
     public string SomeVal { get; set; } // create custom event arg for your need 
    } 

    protected virtual void OnFirstUpdateEvent(UpdatedEventArgs e) 
    { 
     if (updateEvent != null) 
      updateEvent(this, e); 
    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
     UpdatedEventArgs eventData = new UpdatedEventArgs(); 
     eventData.SomeVal = "test"; // set update event arguments, according to your need 

     OnFirstUpdateEvent(eventData); 
    } 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

表1碼

public Form1() 
    { 
     InitializeComponent(); 

     Form2 form2 = new Form2(); 
     form2.updateEvent += new EventHandler<Form2.UpdatedEventArgs>(form2_updateEvent); // create event handler to update form 1 from form 2 
     form2.Show(); 
    } 

    void form2_updateEvent(object sender, Form2.UpdatedEventArgs e) 
    { 
     if (e != null && e.SomeVal != null) 
     { 
      // Do the update on Form 1 
      // depend on your event arguments update the grid 
      //MessageBox.Show(e.SomeVal); 
     } 

    } 
相關問題