2012-04-06 58 views
3

我有一個應用程序顯示來自MySQL表的數據。基本上,我的應用程序由兩種形式組成:主窗體和向數據庫添加內容的窗體。單獨格式刷新對象

主窗體顯示數據庫中的所有條目和相關信息。當用戶想要將新條目添加到數據庫時,會打開一個輔助表單來提示輸入信息。信息填寫完成後,用戶按下提交按鈕並關閉表單。我的問題是,當輔助表單關閉時,主窗體中的listBox不會更新以反映新添加的條目。

這裏是被執行的代碼,當用戶提交第二形狀:

private void closeWindow() 
    { 
     mainForm parent = new mainForm(); 
     parent.listParts.Refresh(); 
     this.Close(); 
    } 

有,當我打電話listBox被刷新的一個原因,它不顯示我的新添加的信息?也許我以錯誤的順序來打電話?或者Refresh()方法甚至不能像那樣工作?

任何幫助,將不勝感激!或者,如果您知道更好的方法來做到這一點,我很樂意聽到它!

回答

4

的問題是,你刷新錯形式

private void closeWindow() 
{ 
    mainForm parent = new mainForm(); 
    parent.listParts.Refresh(); 
    this.Close(); 
} 

由於您使用:new mainForm(),你正在分配一個完全獨立的「mainForm」實例,並刷新它的內容。這不會影響現有的已打開表格。

我會建議將對mainForm的引用傳遞給輔助表單的構造函數。然後它會知道它需要使用mainForm的哪個實例來調用Refresh()

+0

這很有道理!你知道一種方法來調用現有的表單嗎? – 2012-04-06 17:48:14

+1

@AndrewDeForest打開它時傳遞該表單的一個實例。創建輔助表單時,將「this」(創建它的主表單)傳遞給該表單,並將其存儲在那裏。這樣,你就可以在整個過程中獲得正確的參考。 – 2012-04-06 17:48:53

+0

謝謝,我會給你一個機會! – 2012-04-06 17:49:34

1

我想你應該重新載入數據。再次獲取設置數據源

將父項屬性添加到您的子窗體,該窗體是您的第一個窗體的類型。

有些事情是這樣的。

你父窗體

public partial class KitTypes : Form 
{ 

public void ReloadData() 
{ 
    // Get the data and Set as datasource of control 
} 

} 

和兒童形式

public partial class Kit : Form 
{ 
    private int _KitId=0; 
    private KitTypes _parentForm = null; 


public Kit(KitTypes parentForm) 
{ 
    _parentForm =parentForm; 
} 
} 

從你的第一種形式,當你創建一個這樣的對象,通過父窗體作爲參數

Kit objChild=new kit(this); 
    objChild.Show(); 

現在,在你的孩子,形成可以調用父窗體的公共方法,這樣

this._parentForm.ReloadData(); 
+0

正如蘆葦所說,潛在的問題是他使用了錯誤的窗體實例。 – Servy 2012-04-06 17:51:56

2

裏德given an answer用,爲什麼你做了什麼din't工作,下面是如何真正解決這個問題的一個可能的解決方案:在一些事件處理程序的MainForm

var otherForm = new SomeOtherForm(); 
otherForm.Closed += (sender, args) => 
{ 
    //update the listbox in MainForm here 
}; 

如果你需要的信息從第二種形式更新列表框,然後在SomeOtherForm中製作公開屬性,公開MainForm所需的數據。