2013-04-09 43 views
2

我在我的C#中有一個組合框,它位於名爲frmMain的表單中,當我在我的設置表單中添加一個產品(名稱爲frmSettings)時,它會自動填充。當我點擊按鈕button1_Click時,我想重新加載frmMain,以便可以看到新添加的產品。如何點擊按鈕提交另一種形式時,在c#中重新加載窗體?

我嘗試使用

frmMain main = new frmMain(); 
main.Close(); 
main.Show(); 

我知道這個代碼是如此有趣,但沒有奏效。 :D

這是windows窗體!

編輯

請參閱我的程序的這一形象更好地理解。 這是我frmMain enter image description here

這裏是我的設置frmSettings形式的樣子。所以,正如你所看到的,當我點擊提交按鈕時,我想讓frmMain重新加載,這樣我添加到設置中的更新值將在frmMain comboBox中可見。

enter image description here

+0

Windows或Web? – yogi 2013-04-09 07:46:06

+4

爲什麼要重新加載整個表單有什麼特別的理由嗎?你爲什麼不更新組合框? – derape 2013-04-09 07:46:18

+0

你的意思是添加另一個按鈕來更新組合框?一個單獨的代碼?但我需要在表單中有幾個按鈕,實際上我的表單中已經有一個按鈕,所以如果我添加一個用於更新,則會有兩個按鈕,而我不喜歡用按鈕加載我的表單。 – Jayseer 2013-04-09 07:50:08

回答

5

更新:既然你改變了你的問題在這裏是更新的版本更新您的產品

這是你的產品形式:

private frmMain main; 

public frmSettings(frmMain mainForm) 
{ 
    main = mainForm; 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    main.AddProduct(textBox1.Text); 
} 

它需要在構造函數中的MainForm將數據傳遞給它。

和主要形式:

private frmSettings settings; 
private List<string> products = new List<string>(); 

public frmMain() 
{ 
    InitializeComponent(); 
    //load products from somewhere 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (settings == null) 
    { 
    settings = new frmSettings(this); 
    } 
    settings.Show(); 
} 

private void UpdateForm() 
{ 
    comboBoxProducts.Items.Clear(); 
    comboBoxProducts.Items.AddRange(products.ToArray()); 

    //Other updates 
} 

public void AddProduct(string product) 
{ 
    products.Add(product); 
    UpdateForm(); 
} 

然後可以調用UpdateForm()來自世界各地的上你形成,另一個按鈕實例。 本示例僅使用本地變量來存儲您的產品。還有一些檢查添加產品的某些檢查,但我想你會明白...

+0

請參閱我的編輯,這是我的程序看起來像。 – Jayseer 2013-04-09 08:32:25

+0

@Jayseer我更新了我的例子 – derape 2013-04-09 12:00:51

1

沒有這樣的內置的方法,您希望設置所有的值。正如我在,你應該創建一個方法,你需要的所有控件設置的評論中提到,這裏是示例代碼:

private void ReloadForm() 
{ 
    comboBox.ResetText(); 
    dataGridView.Update(); 
    //and how many controls or settings you want, just add them here 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    ReloadForm(); //and call that method on your button click 
} 
+0

我會嘗試,但我不想重置組合框只是想重新加載它。 – Jayseer 2013-04-09 08:06:52

+0

先試試看,然後問。這將只是重新加載和刪除用戶從項目選擇,不清除項目。如果你想清除項目,然後使用'comboBox1.Items.Clear()'。 – Shaharyar 2013-04-09 08:09:56

+0

@Jayseer「更新」是什麼意思?你想提供什麼樣的行爲? – derape 2013-04-09 08:10:33

0

試一試這段代碼。

this.Refresh(); 
Application.Doevents(); 
0

如果你正在尋找從用戶控件。在這裏刷新頁面expample其中i amrefreshing形式從用戶控件 在其中找到這個重載按鈕的形式。 然後調用invalidiate選項卡控件並刷新它。

Dim myForm As Form = btnAuthorise.FindForm() 

For Each c As Control In myForm.Controls 
       If c.Name = "tabControlName" Then 
        DirectCast(c, System.Windows.Forms.TabControl).Invalidate() 
        DirectCast(c, System.Windows.Forms.TabControl).Refresh() 'force the call to the drawitem event 
       End If 
Next 
0
this.Refresh(); 
Refresh(); 
this.Hide(); 
frmScholars ss = new frmScholars(); 
ss.Show(); 
-1

我認爲,通過調用frmMain_load(sender,e)當你點擊按鈕應該重新加載形式。

您也可以嘗試Invalidate()表格,就像@Nahum所說。