2013-11-04 61 views
4

如何重新加載或刷新Windows窗體到原始狀態?我已經使用this.Refresh();, this.Invalidate();, form.Refresh(),form.Invalidate()如何重新加載或刷新Windows窗體到原始狀態?

private void AdduserBtn_Click_1(object sender, EventArgs e) 
{ 
    UserManagement obj = new UserManagement(); 
    obj.CourseCategoryId = (int) CourseRegCbox.SelectedValue; 
    obj.IDNumber = IDNumberTbox.Text; 
    obj.Password = PasswordRegTbox.Text; 
    obj.FName = FnameRegTbox.Text; 
    obj.LName = LnameRegTbox.Text; 
    obj.Gender = GenderTbox.Text; 
    obj.Email = EmailRegTbox.Text; 
    obj.PhoneNumber = PhonenumberRegTbox.Text; 
    obj.Address = AddressRegTbox.Text; 

    if (UserManagement != null && UserManagement.Id > 0) 
    { 
     obj.Id = UserManagement.Id; 
     if (UserManagement.UserInfo_Update (obj) > 0) 
     { 
      MessageBox.Show ("Record Succesfully Updated!"); 
      UserInfoForm form = new UserInfoForm(); 
      form.Refresh(); 
     } 
     else 
     { 
      MessageBox.Show ("An error occured!"); 
     } 
    } 
    else 
    { 
     if (UserManagement.UserInfo_Insert (obj) > 0) 
     { 
      MessageBox.Show ("Record Succesfully Added!"); 
      UserInfoForm form = new UserInfoForm(); 
      form.Refresh(); 

     } 
     else 
     { 
      MessageBox.Show ("An error occured!"); 
     } 
    } 
} 

我只是想要重新加載的形式進入原始狀態一旦數據正確保存或更新。

+0

什麼樣的形式是你上面的代碼?它是一個UserInfoForm?因爲如果它是保持主窗體可見,則創建一個新的UserInfoForm而不顯示它並嘗試刷新它。 –

+0

是的,即時通訊保持主窗體可見,當我添加數據,並且當它成功保存時,主窗體將被重新加載或將被刷新到其原始狀態..它就像窗體是新鮮加載。 –

回答

3

「this.Refresh();, this.Invalidate();, form.Refresh(),form.Invalidate()」

這些功能只是告訴窗口管理器重繪形式圖形;它們與表單數據的狀態無關。

似乎所有你需要做的是設置你的控制值回其原始值,因此,使窗體上的功能:

private void ResetForm() 
    { 
     //write code here to setup your dropdowns, put empty strings into textboxes, etc. 
     //pretty much the reverse of the process by which you copy the values into your user object. 
    } 

,然後在代碼中調用的函數的研製成功部分:

if (UserManagement.UserInfo_Update (obj) > 0) 
      { 
       MessageBox.Show ("Record Succesfully Updated!"); 
       //reset this form, no need to make another one... 
       ResetForm(); 
      } 

,你還可以包括向ResetForm()某處你,打電話等

然而

我建議一旦你舒服這樣做,你再停止這樣做並使用內置到的WinForms的data-binding facility;它允許你做的是使用設計器將表單(文本框等)上的用戶界面元素綁定到各種類屬性(例如UserManagement類)。

這種方式創建的UserManagement一個新實例,而不必應付清理出文本框等,否則你會發現作爲你的對象越來越複雜,寫的所有的眉頭細節,你可以簡單地「復位」你的表格手動重置表單UI元素的代碼變得越來越單調乏味並且容易出錯。

希望有所幫助。

+0

如果投票人會留下評論關於*爲什麼他們認爲需要......答案錯誤, –

+0

就我而言,這是一個很好的答案。 +1 –

1

這很簡單。您必須創建一個新的表單對象並關閉當前表單。

Form fr = new Form(); 
    fr.Show(); 
    this.Close(); 
0

我通過關閉並打開表單來完成此操作。因此,與您的窗體名稱替換*****

 ***your form name** ss = new **your form name***(); 
     ss.Show(); 
     this.Hide(); 

我也建議把形式接近完全關閉的形式:

private void ***Your form name***Closed(object sender, FormClosedEventArgs e) 
    { 
     Application.Exit(); 
    }