5

Windowsフォームを元の状態にリロードまたはリフレッシュする方法は? 私は this.Refresh();,this.Invalidate();,form.Refresh(),form.Invalidate() を使用しました

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!");
        }
    }
}

データが適切に保存または更新されたら、フォームを元の状態にリロードしたいだけです。

4

4 に答える 4

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()などのどこかに呼び出しを含めることもできますForm_Load

でも

これに慣れたらやめて、 Winforms に組み込まれているデータ バインディング機能を使用することをお勧めします。できることは、デザイナーを使用して、フォーム上のユーザー インターフェイス要素 (テキスト ボックスなど) をさまざまなクラス プロパティ (クラスなど) にバインドすることUserManagementです。

このようにして、新しいインスタンスを作成することでフォームを簡単に「リセット」できますUserManagement。テキストボックスをクリアするなどの厄介な詳細に対処する必要はありません。そうしないと、オブジェクトがより複雑になるにつれて、手動でフォームをリセットするコードを書くことがわかります。 UI 要素はますます退屈になり、エラーが発生しやすくなります。

それが役立つことを願っています。

于 2013-11-05T14:03:38.973 に答える
1

これは簡単です。新しいフォーム オブジェクトを作成し、現在のフォームを閉じる必要があります。

 Form fr = new Form();
     fr.Show();
     this.Close();
于 2015-12-26T22:28:22.283 に答える